2013-04-29 46 views
0

awk中的變量不返回結果。AWK可變問題

我想通過使用awk從文件中獲取匹配值的下一行。它工作正常,沒有變量。謝謝。

$ cat file 
name=bobk 
snm=sahh 
emp=bklc 
jdate=879 
$ 
$ awk '/name/{getline; print}' file 
snm=sahh ---------> Got the result 
$ 
$ export MYVAR=name 
$ 
$ echo $MYVAR 
name 
$ 
$ awk -v AVAR=${MYVAR} '/AVAR/{getline; print}' file 
$ ---------> No result 

回答

3

你需要使用正則表達式匹配運算符~對整條生產線$0/AVAR/是匹配的字符串AVAR不是變量AVAR

$ awk -v AVAR=${MYVAR} '$0~AVAR{getline; print}' file 
snm=sahh 
+1

非常感謝解決方案。有用。 – Sourcecode 2013-04-29 18:57:50

0

使用AWK變量來傳遞參數幾乎總是清潔劑的意圖;然而,在這種特定情況下,由此產生的腳本比它需要的複雜一點 - 並且稍微打破規則實際上可能更容易理解並與其他人交流。

通過使用雙引號來轉義腳本,不需要使用額外的AWK變量。那麼,如果我們將shell變量放在/'中,那麼{}就不需要了:{

$ awk "/$MYVAR/ {getline; print}" file 
snm=sahh 
$