如何解决打印包含一组模式的段落发生顺序无关紧要
给出一组模式A = {a_1,a_2,...,a_n}
,我要打印包含所有这些模式的段落:a_1
,a_2
,...,a_n
。
- 段落以非空白字符开头,以仅包含空白字符的行结尾。
- 样式在段落中出现的顺序无关紧要。
假设我有以下文件
$ cat main.txt
a
b
c
a
b
b
c
c
a
a
b
c
我要打印所有包含以下模式的段落:\<a\>
,\<b\>
,\<c\>
。也就是说,输出应该是
$ {some command here}
a
b
c
我写了以下命令。但是,这会将那些仅包含空格或制表符的行视为段落的一部分(请记住,仅包含空格的行不能视为段落的一部分)。我认为可以通过执行一次awk
来改善这一点。
$ awk -v RS= '/\<a\>/ {print $0,"\n"}' main.txt |\
awk -v RS= '/\<b\>/ {print $0,"\n"}' |\
awk -v RS= '/\<c\>/ {print $0}'
a
b
c
有没有更有效的方法来实现这一目标?
解决方法
您必须为空的RS
准备输入内容:
awk '!NF{$0=""}1' main.txt > input.txt
这样,所有空白(非空)行都不会被视为段落的一部分,并且您消除了这些空白成为您的一种模式的一部分的可能性。实际上,很难成为模式的一部分(但并非不可能),但是很有可能统一段落,因此,此输入"a\n \nb\n\c"
将被视为匹配所有模式的一个段落。
当然,您必须运行一次awk
才能一起测试每个段落的所有模式。但是,即使您现在准备一次输入一次,它也可以工作,只要准备输入即可。
awk -v RS= '/\<a\>/ && /\<b\>/ && /\<c\>/{print $0,"\n"}' input.txt
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。