大多数解决方案都是从python调用awk。但我想反过来这样做。我有一个从文件中提取信息的python脚本。然而,所述文件名在awk脚本的列中被引用。从awk调用python脚本
如何传递python参数“%s20s”,文件名并从标准输出中获取输入?我想将输出添加为更多列。
感谢您的例子
干杯
大多数解决方案都是从python调用awk。但我想反过来这样做。我有一个从文件中提取信息的python脚本。然而,所述文件名在awk脚本的列中被引用。从awk调用python脚本
如何传递python参数“%s20s”,文件名并从标准输出中获取输入?我想将输出添加为更多列。
感谢您的例子
干杯
awk的变量FILENAME给出当前文件的名称正在处理(或“ - ”如果标准输入)。但是,这是在BEGIN块不可用,但可以使用ARGV [1],而不是(假设你只有经过一个文件名):
#!/bin/awk -f
BEGIN {
cmd = "./myscript.py '\"%s20s\"' " ARGV[1]
print cmd
cmd | getline var
print var
}
的Python脚本(PY 3)我用于测试的是:
#!/usr/bin/python
import sys
print(sys.argv)
所以我得到以下输出:
/home/user1> runit.awk afile
./myscript.py "%s20s" afile
['./myscript.py', '"%s20s"', 'afile']
谢谢你的pyhton工作例子 – tarrasch 2011-05-09 11:32:22
您可以使用system
函数调用外部命令。这能解决你的问题吗?
$ awk 'BEGIN { system("echo something") }'
something
但是,只提供了返回码。所以如果你想多行
$ 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
你尝试过这么远吗?你的awk脚本是什么?帮助我们帮助你!越详细越好! – jathanism 2011-05-03 13:39:19