次のシェルスクリプトコードがあります。ここで、NR==$i
ingawk
ステートメントを使用している場合は機能しませんが、単にNR==1
(または他の整数値) を使用すると、完全に正常に機能します。
for ((i=1;i<=5;i++))
do
gawk 'NR==$i{//some action}' input.txt
done
ここで何が問題なのか誰か教えてください。
問題は、awk
スクリプトが一重引用符で囲まれているということbash
は、文字列内で置換が行われず、gawk
文字どおりに表示されることを意味することです (これは、スクリプトで初期化されていないため$i
と同じです)。$0
i
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
そのため、代わりに二重引用符 ( "
) を試してください。