假设我有文件1.txt
、2.txt
和3.txt
,全部分别具有以下内容:
foo1
Notes
foo2
bar
现在,我想打印出放置的行后模式Notes
直到文件末尾,并包含foo
或bar
模式。为了实现这一点,我运行以下命令:
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/'