我试图理解shell脚本中的gawk
。下面的命令试图根据标记段落结尾的两个(或更多)连续新行来计算段落数。
gawk 'END{print "Number of paragraphs: "NR}' RS="" tmp.txt
它是如何运作的?
答案 0 :(得分:3)
GNU awk
手册中提到了RS:
空字符串
""
(没有任何字符的字符串)具有特殊含义作为值 RS这意味着记录由一个或多个空行分隔,而不是其他任何内容。
因此,您的程序可以解析如下:
gawk 'END{print "Number of paragraphs: "NR}' RS="" tmp.txt
gawk
命令。gawk
脚本为END{print "Number of paragraphs: "NR}
(单引号由shell删除)。当输入结束时,它会打印前面带有短语的NR值。 NR是读取的记录数。请注意,这是使用短语和NR之间的隐式连接运算符。它也可以写成print "Number of paragraphs:", NR
,它会产生相同的结果。RS=""
实际上被gawk
视为RS=
(双引号被shell删除)。这将设置手册中引用的特殊模式。在这里,两个或多个连续的换行将被计为段落的结尾,EOF也是如此。tmp.txt
。因此,该命令有效,因为gawk
内置了一个特殊情况。
本讨论中的所有内容也适用于标准awk
。