awk先于模式匹配并找到结果数

时间:2019-09-05 17:55:09

标签: awk

我想在搜索模式前加上[结果编号],而不考虑行。

示例:

  

段落的功能是标记暂停,将段落与之前的段落区分开。如果在段落前加上标题或副标题,则缩进是多余的,因此可以省略

如何在每次比赛之前插入[nth]个结果?

所需的输出:

  

[1]段落的功能是标记暂停,将[2]段落与之前的段落区别开来。如果[3]段落前面有标题或副标题,则缩进是多余的,因此可以省略。

我似乎快到了,但是我如何打印周围的内容和火柴呢?

awk 'BEGIN { RS=" "; n=1 } /paragraph/ { print "[" n++ "]"" " $0}' paragraphfile 
[1] paragraph
[2] paragraph
[3] paragraph

1 个答案:

答案 0 :(得分:2)

您只需要对其进行一些修改即可:1)将输出分隔符与输入分隔符匹配,以及2)打印出不匹配的记录以及匹配的记录:

$ awk 'BEGIN { ORS=RS=" "; n=1 } /paragraph/ { print "[" n++ "]"" " $0} !/paragraph/' paragraphfile

更新:哦,您可能还应该修改它以进行全记录匹配,以避免例如ittitleomitted匹配,甚至不用考虑a

$ awk 'BEGIN { ORS=RS=" "; n=1 } /\<a\>/ { print "[" n++ "]"" " $0} !/\<a\>/' paragraphfile

不幸的是,awk似乎没有“不区分大小写”的匹配,因此Thethe是“不同”的词。您需要切换到Perl来处理该问题。

更新2:或者对每个单词自己“大写”:

$ awk 'BEGIN { ORS=RS=" "; n=1 } /\<[Tt]he\>/ { print "[" n++ "]"" " $0} !/\<[Tt]he\>/' paragraphfile