awk命令的含义

时间:2014-01-17 22:56:43

标签: awk gawk

我试图理解shell脚本中的gawk。下面的命令试图根据标记段落结尾的两个(或更多)连续新行来计算段落数。

gawk 'END{print "Number of paragraphs: "NR}' RS="" tmp.txt

它是如何运作的?

1 个答案:

答案 0 :(得分:3)

GNU awk手册中提到了RS:

  

空字符串""(没有任何字符的字符串)具有特殊含义作为值   RS这意味着记录由一个或多个空行分隔,而不是其他任何内容。

因此,您的程序可以解析如下:

gawk 'END{print "Number of paragraphs: "NR}' RS="" tmp.txt
  1. 运行gawk命令。
  2. gawk脚本为END{print "Number of paragraphs: "NR}(单引号由shell删除)。当输入结束时,它会打印前面带有短语的NR值。 NR是读取的记录数。请注意,这是使用短语和NR之间的隐式连接运算符。它也可以写成print "Number of paragraphs:", NR,它会产生相同的结果。
  3. RS=""实际上被gawk视为RS=(双引号被shell删除)。这将设置手册中引用的特殊模式。在这里,两个或多个连续的换行将被计为段落的结尾,EOF也是如此。
  4. 处理的文件为tmp.txt
  5. 因此,该命令有效,因为gawk内置了一个特殊情况。

    本讨论中的所有内容也适用于标准awk