为什么awk 'END{print}' file
会返回一个空字符串?
我已检查过该文件但不以空行结束。
我在HP-UX上。
答案 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
:)