从awk调用python脚本
大多数网上的解决方案都是从Python中调用awk。但我想反过来做。我有一个Python脚本,它从一个文件中提取信息。不过,这个文件名在awk脚本的某一列中被引用。
我该如何把参数"%s20s"和文件名传给Python,并从标准输出中获取输入呢?我想把这个输出作为更多的列添加进去。
谢谢你的例子
祝好
2 个回答
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
3
awk中的变量FILENAME会告诉你当前正在处理的文件名(如果是从标准输入读取,则显示为'-')。不过,这个变量在BEGIN块中是无法使用的,但你可以用ARGV[1]来代替(前提是你只传入一个文件名):
#!/bin/awk -f
BEGIN {
cmd = "./myscript.py '\"%s20s\"' " ARGV[1]
print cmd
cmd | getline var
print var
}
我用来测试的Python脚本(Python 3)是:
#!/usr/bin/python
import sys
print(sys.argv)
所以我得到了以下输出:
/home/user1> runit.awk afile
./myscript.py "%s20s" afile
['./myscript.py', '"%s20s"', 'afile']