如何在AWK中检测记录是否以RS结尾?
在awk中,如何在AWK中检测记录是否以RS结尾?,awk,Awk,在awk中,$0代表原始行,尾随的RS带条纹。 但是我如何知道最后一行是否以RS结尾?如果该行没有以RS结尾,那么$0将把所有字符放入字符串中,直到遇到RS为止。 因此,当您打印$0时,遇到RS总是正确的 AWK默认RS为单个新行 打印最后一行 awk -v max="$(wc -l < file)" 'FNR == max { print "Final line:",$0 }' file 如果行不以RS结尾,那么$0将把所有字符放入字符串中,直到遇到RS为止。 因此,当您打印$0时,
$0
代表原始行,尾随的RS带条纹。但是我如何知道最后一行是否以RS结尾?如果该行没有以RS结尾,那么$0将把所有字符放入字符串中,直到遇到RS为止。 因此,当您打印$0时,遇到RS总是正确的 AWK默认RS为单个新行 打印最后一行
awk -v max="$(wc -l < file)" 'FNR == max { print "Final line:",$0 }' file
如果行不以RS结尾,那么$0将把所有字符放入字符串中,直到遇到RS为止。 因此,当您打印$0时,遇到RS总是正确的 AWK默认RS为单个新行 打印最后一行
awk -v max="$(wc -l < file)" 'FNR == max { print "Final line:",$0 }' file
您可以检查内置
RT
变量是否设置为空。见:
如果输入文件结束时没有任何与RS匹配的文本,则gawk将RT设置为空字符串
您可以检查内置
RT
变量是否设置为空。见:
如果输入文件结束时没有任何与RS匹配的文本,则gawk将RT设置为空字符串
以下任一项都可以: GNU awk:
gawk 'END{if (RT!="") print "found RS"}' file
任何awk(假设RS没有设置为与FS相同的值)
以下任一项都可以: GNU awk:
gawk 'END{if (RT!="") print "found RS"}' file
任何awk(假设RS没有设置为与FS相同的值)
如果行不以RS结尾,那么$0将把所有字符放入字符串中,直到遇到RS为止。因此,当您打印$0时,遇到的总是RS。那么以EOF而不是RS结尾的输入的最后一行呢@realspiritualsi如果该行不以RS结尾,那么$0将把所有字符放入字符串中,直到遇到RS为止。因此,当您打印$0时,遇到的总是RS。那么以EOF而不是RS结尾的输入的最后一行呢@realspiritual
END
块保持最后一行的处理,在您的第一个案例中使用它不是更有效吗?@Birei END块只在某些AWK中保持最后一行的处理,而不是在所有AWK中。即使是POSIX合规性也不需要该功能。@realspirituals当您打印$0时,说是不正确的,但遇到RS总是正确的
。例如,如果RS是一个换行符,并且输入文件没有以换行符结尾,那么最后一行仍然会填充$0,就像文件以换行符结尾一样。另外,使用awk时不需要UOOC或sed。@埃德蒙顿:谢谢。我不知道,我以为END
块是所有awk
风格之间的标准。@Birei-END
块是所有awk中的标准块,是END
块中的内置变量在awk版本之间变化。例如,POSIX要求上次读取记录中的NF
可用,但不要求$0
可用。END
块保持最后一行已处理,在第一种情况下使用它不是更有效吗?@Birei END块仅在某些AWK中保持最后一行已处理,而不是所有AWK。即使是POSIX合规性也不需要该功能。@realspirituals当您打印$0时,说是不正确的,但遇到RS总是正确的
。例如,如果RS是一个换行符,并且输入文件没有以换行符结尾,那么最后一行仍然会填充$0,就像文件以换行符结尾一样。另外,使用awk时不需要UOOC或sed。@埃德蒙顿:谢谢。我不知道,我以为END
块是所有awk
风格之间的标准。@Birei-END
块是所有awk中的标准块,是END
块中的内置变量在awk版本之间变化。例如,POSIX要求上次读取记录中的NF
可用,但不要求$0
可用。