awk优先模式匹配与找到的结果数

awk优先模式匹配与找到的结果数,awk,Awk,我想在搜索模式前面加上[result number],而不考虑行 例如: 段落的功能是标记停顿,将段落与前面的段落区分开来。如果段落前面有标题或副标题,缩进是多余的,因此可以省略 如何在每次匹配之前插入[n]个结果 期望输出: [1]段落的功能是标记暂停,将[2]段落与前面的段落分开。如果[3]段前面有标题或副标题,缩进是多余的,因此可以省略 我似乎快到了,但我如何打印周围的内容以及比赛 awk 'BEGIN { RS=" "; n=1 } /paragraph/ { print "[" n++

我想在搜索模式前面加上[result number],而不考虑行

例如:

段落的功能是标记停顿,将段落与前面的段落区分开来。如果段落前面有标题或副标题,缩进是多余的,因此可以省略

如何在每次匹配之前插入[n]个结果

期望输出:

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

我似乎快到了,但我如何打印周围的内容以及比赛

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

您只需稍微修改它,1将输出分隔符与输入分隔符匹配,2将不匹配的记录以及匹配的记录打印出来:

$ awk 'BEGIN { ORS=RS=" "; n=1 } /paragraph/ { print "[" n++ "]"" " $0} !/paragraph/' paragraphfile
更新:哦,您可能还应该修改它以进行完整记录匹配,以避免匹配标题和省略,甚至不要考虑:


print str打印str+ORS,ORS默认设置为换行。而且,除非您告诉它,否则awk不会打印记录。删除n=1并在您将使用的解决方案上更改为++n。您正在使用的.GNU awk \与IGNORECASE=1进行不区分大小写的匹配,并且如果您需要对小写$0进行多个匹配,您可以对任何awk执行以下$0~/段落/或{lc=tolower$0}lc~/段落/的操作。
$ awk 'BEGIN { ORS=RS=" "; n=1 } /\<a\>/ { print "[" n++ "]"" " $0} !/\<a\>/' paragraphfile
$ awk 'BEGIN { ORS=RS=" "; n=1 } /\<[Tt]he\>/ { print "[" n++ "]"" " $0} !/\<[Tt]he\>/' paragraphfile