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