大多数解决方案都是从python调用awk。但我想反过来做。我有一个python脚本从文件中提取信息。但是,在awk脚本的列中引用了所述文件名。
如何传递python参数“%s20s”,filename并从标准输出中获取输入?我想将输出添加为多个列。
感谢你的例子
干杯
答案 0 :(得分:3)
您可以使用system
功能调用外部命令。这会解决你的问题吗?
$ awk 'BEGIN { system("echo something") }'
something
但那只提供了返回码。如果你需要捕获stdin,你可以这样做:
$ awk 'BEGIN { "echo something" | getline; print "output: "$0 }'
output: something
Getline逐行工作,如果你想要多行:
$ awk 'BEGIN { while ("cat multi_line_file" | getline) { print "output: "$0 } }'
output: line 1
output: line 2
output: line 3
答案 1 :(得分:3)
awk变量FILENAME给出了正在处理的当前文件的名称(如果是stdin,则为' - ')。但是,这在BEGIN块中不可用,但您可以改为使用ARGV [1](假设您只传递一个文件名):
#!/bin/awk -f
BEGIN {
cmd = "./myscript.py '\"%s20s\"' " ARGV[1]
print cmd
cmd | getline var
print var
}
我用于测试的python脚本(py3)是:
#!/usr/bin/python
import sys
print(sys.argv)
所以我得到以下输出:
/home/user1> runit.awk afile
./myscript.py "%s20s" afile
['./myscript.py', '"%s20s"', 'afile']