我有以下shell腳本代碼。在這裏,如果我在gawk
聲明中使用NR==$i
,它不起作用,而如果我只是使用NR==1
(或其他整數值),則它工作得很好。
for ((i=1;i<=5;i++))
do
gawk 'NR==$i{//some action}' input.txt
done
任何人都可以讓我知道這裏有什麼問題嗎?
我有以下shell腳本代碼。在這裏,如果我在gawk
聲明中使用NR==$i
,它不起作用,而如果我只是使用NR==1
(或其他整數值),則它工作得很好。
for ((i=1;i<=5;i++))
do
gawk 'NR==$i{//some action}' input.txt
done
任何人都可以讓我知道這裏有什麼問題嗎?
的問題是,圍繞awk
腳本中的單引號意味着bash
做字符串內沒有替代和gawk
看到字面上$i
(這是一樣的,因爲i
$0
在gawk
腳本未初始化)。
這一次,使用雙引號來代替:
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
但問題是,你正在使用簡單引用('
)圍繞着你的gawk腳本,並且在那bash
不會取代$i
的值,所以請使用雙引號("
)代替。