gawk'NR == $ i ....声明不起作用

时间:2012-05-28 05:08:56

标签: shell gawk

我有以下shell脚本代码。如果我在NR==$i语句中使用gawk,则它不起作用,而如果我只使用NR==1(或其他一些整数值),则它可以正常工作。

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

任何人都可以告诉我这里的问题是什么?

2 个答案:

答案 0 :(得分:4)

问题是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

通常,明确传递变量可能更好:

{{1}}

答案 1 :(得分:2)

问题在于您在gawk脚本周围使用简单引号('),并且bash内的$i不会替换"的值,因此请尝试使用双引号({{1}})代替。