假设我有文件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
/getline==0/
正在寻找永远不会发生的模式。getline==0
如果你有 GNU awk,你可以这样做
否则(更惯用的)