在按CTRL + D之前,awk代码无法自动结束

时间:2018-04-16 16:13:56

标签: awk

我有一个简单的awk代码,如下所示:

awk 'BEGIN {OFMT="%.0f"} {print 18.23}'

但是在我按 ENTER 之后,什么都没有。我再次按 ENTER ,然后我得到结果18,但在按 CTRL + D 之前它不会自动结束。

我将代码更改为:

awk 'BEGIN {OFMT="%.0f";print 18.23}'

然后它运作正常。

我不知道造成这种差异的原因。我的理解:{print 18.23}是一个动作,但为什么在我搬到BEGIN的部分后没有问题?

1 个答案:

答案 0 :(得分:2)

第一个{print ...}脚本中的

awk称为主输入循环。您在此块中编写的用于执行处理的操作假定存在可用的输入行。由于没有指定文件,因此等待用户输入。要在第一次迭代时终止它,您必须手动调用exit。这就是为什么你可以看到下面的管道awk按预期工作:

echo "" | awk 'BEGIN {OFMT="%.0f"} {print 18.23;}'

awk中有三个主要块:

  • BEGIN {}一旦开始
  • {}在每个输入行执行
  • END {}一旦处理结束

这些图片来自O'Reilly sed& awk 书:

enter image description here