我有以下shell脚本代码。如果我在NR==$i
语句中使用gawk
,则它不起作用,而如果我只使用NR==1
(或其他一些整数值),则它可以正常工作。
for ((i=1;i<=5;i++))
do
gawk 'NR==$i{//some action}' input.txt
done
任何人都可以告诉我这里的问题是什么?
答案 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}})代替。