感谢@snowave童鞋,摘取了/usr/bin/run-parts最后一段的awk内容给我看:
$i 2>&1 | awk -v “progname=$i” ‘progname {print progname “:\n”;progname=””;} { print; }’ |
上面这行其实相当于$i 2>&1 | awk ‘BEGIN{print “‘$i’:\n”}{print}’ ,解释一下原版的用法: |
-v是定义一个awk内的变量,用来传递外面的shell变量到awk里; progname是就是如果存在这个变量执行下面语句段; 然后在第一次print了之后把progname变量清空了,之后就不会再执行了。 最后的print就是显示管道出来的结果了。
不过在我的理解和实验中,每次都经过一次if判断,执行效率远远不如begin处理。不知道为什么系统脚本会采用这种写法~~