处理多个文件时 awk 的范围会重置

处理多个文件时 awk 的范围会重置

假设我有文件1.txt2.txt3.txt,全部分别具有以下内容:

foo1

Notes

foo2
bar

现在,我想打印出放置的行模式Notes直到文件末尾,并包含foobar模式。为了实现这一点,我运行以下命令:

awk '/Notes/,/getline==0/ {if (/foo|bar/) {print}}' *txt

然而,一旦awk处理第二个文件,这个范围似乎就会重置,因为结果如下(仅应显示foo2和条目):bar

foo2
bar
foo1
foo2
bar
foo1
foo2
bar

显然,如果我这样做:

for i in $(*txt); do awk '/Notes/,/getline==0/ {if (/foo|bar/) {print}}' $i; done

...一切都会好起来的,但是,当然,我不想awk为每个文件启动一个新进程,所以这并不是真正的解决方案。

我的问题是,如何告诉awk将此搜索范围应用于掩码/组/Notes/,/NR==0/中的所有文件?*txt

答案1

/getline==0/正在寻找图案 getline==0,这永远不会发生。

如果你有 GNU awk,你可以这样做

gawk '/Notes/{notes=1} notes && /foo|bar/ {print} ENDFILE{notes=0}'

否则(更惯用)

awk 'FNR==1{notes=0} /Notes/{notes=1} notes && /foo|bar/'

相关内容