要运行awk
系统命令,你可以使用system()
或cmd | getline
。
我喜欢cmd | getline
,因为它可以让你捕捉值到一个变量:
$ awk 'BEGIN {"date" | getline mydate; close("date"); print "returns", mydate}'
returns Thu Jul 28 10:16:55 CEST 2016
更一般地,你可以在命令到一个变量:
awk 'BEGIN {
cmd = "date -j -f %s"
cmd | getline mydate
close(cmd)
}'
注意它是重要的使用close()
可防止出现“打开太多文件”错误(如果您有多个结果)(感谢mateuscb在注释中指出了这一点)。
使用system()
,命令输出将自动打印,您可以看看的价值是其返回代码:
$ awk 'BEGIN {d=system("date"); print "returns", d}'
Thu Jul 28 10:16:12 CEST 2016
returns 0
$ awk 'BEGIN {d=system("ls -l asdfasdfasd"); print "returns", d}'
ls: cannot access asdfasdfasd: No such file or directory
returns 2
尼特:输出不会壳,这将在终端/安慰。 shell不会读取其子项的任何输出 - 它们只是共享与同一个tty关联的文件描述符。 – 2009-12-25 16:54:19