在awk中$0
代表原始行,尾随RS条纹
但我如何知道最后一行是否以RS结尾?
答案 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