在Awk中为何RS参数设为""与"\n\n"会得到相同效果?
Awk中RS=""与RS="\n\n"效果一致的原因
首先来看我们要处理的文件内容:
Person Name 123 High Street (222) 466-1234 Another person 487 High Street (523) 643-8754
执行以下两条Awk命令会得到完全相同的结果:
$ awk 'BEGIN{FS="\n"; RS="\n\n"} {print $1, $3}' file_contents $ awk 'BEGIN{FS="\n"; RS=""} {print $1, $3}' file_contents
两者的输出结果均为:
Person Name (222) 466-1234 Another person (523) 643-8754
为什么RS=""也能达到和RS="\n\n"一样的效果?
其实这是Awk内置的特殊规则哦!当你把RS设置为空字符串时,Awk会自动将其识别为**“一个或多个连续空行”**作为记录分隔符。具体细节包括:
- 自动忽略文件开头和结尾的空行(如果存在的话)
- 把任意数量的连续换行符(不管是2个、3个还是更多)都当作单个记录分隔符
而RS="\n\n"是严格匹配两个连续的换行符作为分隔符。在你的示例文件中,两个记录之间恰好是一个空行(也就是两个连续换行符),所以两种设置的处理效果完全一致。
要是你的文件里出现了三个及以上连续换行符分隔记录的情况,两者的差异就会显现出来:RS="\n\n"会把多余的单个换行符算作记录内容的一部分,而RS=""仍然会把所有连续空行当作一个分隔符处理。
内容的提问来源于stack exchange,提问作者herophant
相关产品推荐
相关产品推荐

