awk在HP-UX上的END块行为

时间:2015-04-30 14:19:33

标签: shell unix awk hp-ux

为什么awk 'END{print}' file会返回一个空字符串?

我已检查过该文件但不以空行结束。

我在HP-UX上。

2 个答案:

答案 0 :(得分:5)

来自The GNU Awk guide - 7.1.4.2 Input/Output from BEGIN and END Rules

  

传统上,主要由于实施问题,0美元和NF是   在END规则中未定义。 POSIX标准规定NF是   在END规则中可用。它包含来自的字段数   最后输入记录。最可能是由于监督,标准   并没有说$ 0也被保留,虽然逻辑上可以   认为它应该是。事实上,所有BWK都是awk,mawk和gawk   保留$ 0的值以用于END规则。但请注意   其他一些实现和许多旧版本的Unix awk都没有。

因此,一般情况下,END现在包含最后一个$0,而在您的[旧] awk版本中它不包含。{/ p>

例如,我的GNU Awk确实在" new"方式:

$ awk --version
GNU Awk 4.1.0, API: 1.0
$ seq 10 | awk 'END {print}'
10

答案 1 :(得分:3)

END表示"在处理完文件后执行给定的块",没有要打印的数据与之关联。

如果要处理最后一行,请将每行保存在默认块中的变量中,然后在结束块中处理该变量。

awk '{ last_line = $0; } END { /* do something with last_line */}' file

在将数据提供给tail之前使用awk:)