从awk调用python脚本

时间:2011-05-03 13:30:34

标签: python shell awk

大多数解决方案都是从python调用awk。但我想反过来做。我有一个python脚本从文件中提取信息。但是,在awk脚本的列中引用了所述文件名。

如何传递python参数“%s20s”,filename并从标准输出中获取输入?我想将输出添加为多个列。

感谢你的例子

干杯

2 个答案:

答案 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']