(1)
awk '{system("rm $0")}' filename -------WRONG
因为对于 system来说 $0 不再是某行全部的内容,而是 “sh” , 上面的命令相当于执行“ sh rm sh”
具体例子:
如有t,tt,ttt几个zone,需要删除。
#zoneadm list -cv | gawk '{print $2}' | grep t | tail -3| gawk '{system("zonecfg -z $1 delete -F")}'
会报错。
#zoneadm list -cv | gawk '{print $2}' | grep t | tail -3| gawk '{system("zonecfg -z "$1" delete -F")}'
注意:这样就删除成功,$1放在双引号的外面,才能识别是awk中的$1。
# gawk '{system("echo $0")}' 1.ksh
sh
sh
sh
sh
sh
sh
解释:$0为SHELL中的$0,sh的个数是1.ksh的行数。
(3)
awk '{cmd="rm "$0;cmd|getline }' filename ---- OK
man awk里面关于getline的说明,大意是说 运行command,同时会把输出存在$0 里面,或参数var中。
command | getline [var]
Run command piping the output either into $0 or var, as above.
command |& getline [var]
Run command as a co-process piping the output either into $0 or var, as above.
Co-processes are a gawk extension.