此脚本不会终止;它就像是在等待更多的输入。我错过了什么?
echo 'foo bar baz q45' | awk '{ for(i=1;1<NF;i++) if($i ~ "q45") print $i; }'
按预期打印q45
,但只是等待,我需要用Ctrl + c打破。
我对awk很新,很抱歉,如果这是一种编写代码的方法。这是在mac OS X 10.9.3 Mavericks上的终端,如果这很重要的话。
答案 0 :(得分:2)
您在for循环条件下意外键入了1
,意思是i
。由于1始终小于NF(在您的情况下),因此您将获得无限循环。而且您还需要使条件<=
不只是<
才能遍历所有字段。
所以你的命令应该是:
echo 'foo bar baz q45' | awk '{ for (i=1; i<=NF; i++) if ($i ~ "q45") print $i; }'
答案 1 :(得分:1)
您的代码是:
echo 'foo bar baz q45' | awk '{ for(i=1;1<NF;i++) if($i ~ "q45") print $i; }'
循环的原因是因为1<NF
没有意义。意味着for
循环永远不会结束。要看到这个实际运行,请执行以下操作:
echo 'foo bar baz q45' | awk '{ for(i=1;1<NF;i++) print $i; }'
观看屏幕时什么都没有! 1
应该是i
。与此相关,<
也没什么意义。它应该是<=
。所以整个重写的命令将是:
echo 'foo bar baz q45' | awk '{ for(i=1;i<=NF;i++) if($i ~ "q45") print $i; }'