您的位置:首页 > 运维架构 > Shell

awk里面执行shell/系统命令

2016-11-23 23:44 477 查看

先把文件列表存在filename文件中

(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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell