2011-05-03 170 views
3

大多數解決方案都是從python調用awk。但我想反過來這樣做。我有一個從文件中提取信息的python腳本。然而,所述文件名在awk腳本的列中被引用。從awk調用python腳本

如何傳遞python參數「%s20s」,文件名並從標準輸出中獲取輸入?我想將輸出添加爲更多列。

感謝您的例子

乾杯

+5

你嘗試過這麼遠嗎?你的awk腳本是什麼?幫助我們幫助你!越詳細越好! – jathanism 2011-05-03 13:39:19

回答

3

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'] 
+0

謝謝你的pyhton工作例子 – tarrasch 2011-05-09 11:32:22

3

您可以使用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