awk+system+getline

来源:互联网 发布:.club域名价值 编辑:程序博客网 时间:2024/05/18 13:09

# gawk '{cmd="ls";system(cmd)}' argFile
argFile  argOne
argFile  argOne
argFile  argOne
argFile  argOne

(1)awk中使用system执行复杂的SHELL命令。

# gawk '{cmd="ls";system(cmd)}' argFile
argFile  argOne
argFile  argOne
argFile  argOne
argFile  argOne

(2)awk中用双引号把命令括起来,然后用getline获取命令执行的结果。

#gawk '{ "ifconfig -a "| getline M; print M; }' argFile

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
net0: flags=100001100843<UP,BROADCAST,RUNNING,MULTICAST,ROUTER,IPv4,PHYSRUNNING> mtu 1500 index 4
        inet 10.134.9.30 netmask ffffff00 broadcast 10.134.9.255

由于argFile只有四行,因此只输出了四行。getline不能获取到system执行命令之后的结果。

(3)在awk中也可以跟执行shell命令一样调用SHELL脚本。

# cat argFile
1 a b c
1 a b c
1 a b c
1 a b c

# cat printOne
#! /bin/ksh

print "NO:$1"

# gawk '{cmd="./printOne "$1; cmd | getline result; sub($1,result);print } ' argFile
NO:1 a b c
NO:1 a b c
NO:1 a b c
NO:1 a b c
# gawk '{"./printOne "$1 | getline result; sub($1,result);print } ' argFile
NO:1 a b c
NO:1 a b c
NO:1 a b c
NO:1 a b c


0 0