如何在AWK中检测记录是否以RS结尾?

时间:2013-10-11 11:39:43

标签: awk

在awk中$0代表原始行,尾随RS条纹 但我如何知道最后一行是否以RS结尾?

3 个答案:

答案 0 :(得分:3)

您可以检查内置RT变量是否设置为null。参见:

http://www.gnu.org/software/gawk/manual/gawk.html#Reading-Files

  

如果输入文件没有任何匹配RS的文本结束,则gawk将RT设置为空字符串。

答案 1 :(得分:2)

如果该行不以RS结尾,那么$ 0将把所有字符都带入字符串,直到遇到RS。 因此,当您打印$ 0时,始终遇到RS。

AWK默认RS是单个新行

打印最后一行

awk -v max="$(wc -l < file)" 'FNR == max { print "Final line:",$0 }' file 

您有自己的选项,例如RS和EOF(END关键字)具有不同的字符 或者在文件中打印额外的字符,为每个遇到的RS加上后缀“0”,为最后一行加上“1”

cat input_file | sed 's/^/0/;$s/0/1/' | awk '{LST=/^1/;$0=substr($0,2)}
... your awk script in which you can use LST to check for the
... last line.'

答案 2 :(得分:2)

其中任何一个都应该这样做:

GNU awk:

gawk 'END{if (RT!="") print "found RS"}' file

任何awk(假设RS未设置为与FS相同的值)。

awk 'BEGIN{rs=RS;RS=FS} {last=$0} END{if (last ~ rs"$") print "found RS"}' file