1

我有以下 shell 脚本代码。在这里,如果我使用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 回答