我需要将最后一条记录逐字传递给外部命令。我找到了以下代码段here,但它无条件地从上一条记录中删除了ORS
。我只想在输入文件中没有RS
时删除它。
awk 'NR > 1 { print h } { h = $0 } END { ORS = ""; print h }' inputfile
答案 0 :(得分:1)
你的逻辑是倒退的,双重否定使得它很难理解。如果我理解正确的话,如果RS不存在则不想删除ORS,那么如果RS存在,您只想添加ORS。
最简单的方法是使用gawk进行RT,这样每个输出记录都会被终止输入记录的相同字符串终止。
darwinbuild
答案 1 :(得分:0)
一种不依赖于GNU Awk RT
变量的可移植方法是在输入中添加一个虚拟记录:一个虚拟记录,后面没有分隔符。
然后输入被严格分开,你只需要处理两种情况:你要么有一个空白的倒数第二个记录,在这种情况下真正的最后一个记录是倒数第三个。或者,倒数第二个记录是最后一个记录。
如果您跟踪变量中最近看到的非空白记录,则可以在处理结束时打印该记录。
有多种方法可以在输入结尾添加材料。例如,cat
的一些有用用途:
(cat real_input; printf "<record_sep>dummy_rec" ) | awk '...'
或
cat real_input dummy_suffix | awk '...'