我正在尝试理解shell脚本中的gawk。下面的命令试图根据两个(或更多)连续的新行数来计算段落数。
gawk 'END{print "Number of paragraphs: "NR}' RS="" tmp.txt它怎麽工作?
发布于 2014-01-17 23:18:43
GNU awk手册中提到RS:
空字符串
""(没有任何字符的字符串)具有作为RS值的特殊含义。这意味着记录是由一个或多个空行分隔的,而没有其他的。
因此,您的程序可以解析如下:
gawk 'END{print "Number of paragraphs: "NR}' RS="" tmp.txtgawk命令。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。
https://stackoverflow.com/questions/21197519
复制相似问题