1

次のシェルスクリプトコードがあります。ここで、NR==$iingawkステートメントを使用している場合は機能しませんが、単にNR==1(または他の整数値) を使用すると、完全に正常に機能します。

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

ここで何が問題なのか誰か教えてください。

4

2 に答える 2

4

問題は、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
于 2012-05-28T05:18:55.553 に答える
2

'問題は、gawk スクリプトを単純な引用符 ( ) で囲み、その中でbashの値を置き換えないことです。$iそのため、代わりに二重引用符 ( ") を試してください。

于 2012-05-28T05:19:36.490 に答える