我想了解shell脚本中的gawk
。下面的命令试图根据标记段落结尾的两个(或更多)连续的新行来计算段落的数量。awk命令的含义
gawk 'END{print "Number of paragraphs: "NR}' RS="" tmp.txt
它是如何工作的? RS的
我想了解shell脚本中的gawk
。下面的命令试图根据标记段落结尾的两个(或更多)连续的新行来计算段落的数量。awk命令的含义
gawk 'END{print "Number of paragraphs: "NR}' RS="" tmp.txt
它是如何工作的? RS的
的GNU awk
手册说:
空字符串
""
(没有任何字符的字符串)具有特殊的含义如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
。
但是''string“”something“''和''string”,“something”'是不一样的:一个是“纯”串联,后者把字段分隔符放在片段之间。 (刚通过测试检查) – ShinTakezou
是的,它们是不同的。您可能会注意到,在我提出的替代方案中,在冒号后没有空格 - 由于用逗号分隔参数,因此在两个参数(“短语”和NR)之间插入OFS(输出字段分隔符)字符。问题中的印刷陈述有一个论点;修订有两个。 –
so RS =“”menas whats? – john
你可能从一个实际的问题陈述开始,你正在尝试做什么... –
@Ryan J它应该计算段数? – john
基于两个连续的新行 – john