大多數解決方案都是從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