2012-05-28 70 views
1

我有以下shell腳本代碼。在這裏,如果我在gawk聲明中使用NR==$i,它不起作用,而如果我只是使用NR==1(或其他整數值),則它工作得很好。

for ((i=1;i<=5;i++)) 
do 
    gawk 'NR==$i{//some action}' input.txt 
done 

任何人都可以讓我知道這裏有什麼問題嗎?

回答

4

的問題是,圍繞awk腳本中的單引號意味着bash做字符串內沒有替代和gawk看到字面上$i(這是一樣的,因爲i$0gawk腳本未初始化)。

這一次,使用雙引號來代替:

for ((i=1;i<=5;i++)) 
do 
    gawk "NR==$i{//some action}" input.txt 
done 

在一般情況下,它很可能是最好明確傳遞變量:

for ((i=1;i<=5;i++)) 
do 
    gawk -v i=$i 'NR==i{//some action}' input.txt 
done 
2

但問題是,你正在使用簡單引用(')圍繞着你的gawk腳本,並且在那bash不會取代$i的值,所以請使用雙引號(")代替。