awk里面执行shell/系统命令


先把文件列表存在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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值