1

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

4

3 回答 3

3

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

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

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

于 2013-10-11T15:30:47.483 回答
3

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

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
于 2013-10-11T16:46:05.257 回答
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.'
于 2013-10-11T15:23:39.520 回答