2014-01-25 84 views
1

我想執行以下awk腳本在TCL(這是運作良好):TCL AWK exec命令裏面的全局變量

exec awk {$1=="text" {print $0}} temp1.txt > temp2.txt} 

但問題是,「文本」是由TK進入正在添加窗口小部件我必須把它放在awk無法識別的變量($ var)中:

set var [.entry get] 
exec awk {$1==$var {print $0}} temp1.txt > temp2.txt} 

任何想法如何跳過它或使其運行?

PS我想留在awk中,如果可能的話,不要更改tcl上的代碼。

問候, 盧卡斯

+0

我還沒有和AWK工作了大約二十年:不,你需要周圍的報價==表達式的第二個操作數? –

+0

另外,在你的例子中大括號是不平衡的:你的意思是'exec awk {$ 1 == $ var {print $ 0}} temp1.txt> temp2.​​txt'? –

+0

哦!沒有注意到你的第一個例子。畢竟,引用似乎是必要的。請參閱下面的答案。 –

回答

4

使用-v開關AWK通過外部變量AWK:

exec awk -v var=$var {$1==var {print $0}} temp1.txt > temp2.txt} 
+1

這很優雅,並且可以很好地處理任何非二進制非祕密值。 (吮吸密碼/祕密密鑰,但無論如何這通常都是這種情況,並且二進制數據最好使用其他工具處理......) –

+0

確實,awk在任何情況下都無法對二進制數據進行任何strig比較。 – anubhava