2017-10-28 102 views
0

我有結構化的這樣一個逗號分隔的.txt文件:的Linux shell腳本:從標準輸入傳遞變量的awk

ABC,NAME1,LASTNAME1 
DEF,NAME2,LASTNAME2 
GHI,NAME3,LASTNAME3 

在運行時:

$ ./script.sh file.txt 

#!/bin/bash 
awk -F, '/NAME1/{print $3}' "$1" 

我得到我想要的輸出:

LASTNAME1 

當試圖通過將變量傳遞給awk來代替NAME1時:

$ ./script.sh file.txt NAME1 

#!/bin/bash 
awk -v n="$2" -F, '/$n/{print $3'} "$1" 

我根本沒有得到任何輸出。我檢查了一下,在bash中輸入的$2確實是NAME1。我錯過了什麼?在awk中

回答

1

變量名是$前綴, 所以應該只是n代替$n。 另外,您不能使用/.../表達式中的變量。 你可以這樣寫:

awk -v n="$2" -F, '$0 ~ n {print $3}' "$1" 

順便說一句,如果n參數應在第2列完全匹配的值, 那麼最好使用精確的匹配條件與==$2

awk -v n="$2" -F, '$2 == n {print $3}' "$1" 
+0

啊,我明白了!所以,這個awk命令意味着:在我的研究中,在第1列($ 0)中搜索並且如果pattern(n)匹配(〜),打印...「?我還發現,$ 0意味着第一行?這是正確的 – Shushiro

+0

@ Shushiro'$ 0'表示整個當前行。 – janos