在 awk$0
中代表原始行,带有尾随 RS 条纹。
但是我怎么知道最后一行是否以 RS 结尾?
问问题
367 次
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 回答