为什么awk不会退出此脚本的末尾?

时间:2014-06-28 23:26:21

标签: bash awk

此脚本不会终止;它就像是在等待更多的输入。我错过了什么?

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上的终端,如果这很重要的话。

2 个答案:

答案 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; }'