【发布时间】:2013-08-21 14:21:38
【问题描述】:
您好,我正在寻找一个 awk,它可以找到两种模式并将它们之间的数据打印到 仅当中间有第三种模式时才创建文件。 例如:
Start
1
2
middle
3
End
Start
1
2
End
And the output will be:
Start
1
2
middle
3
End
我在网上找到了 awk '/patterns1/, /patterns2/' path > text.txt 但我只需要在中间输出第三个模式。
【问题讨论】:
-
繁琐但可行。你需要在Start和End之间保存素材,遇到Middle的时候注意要打印保存的素材,在处理End的时候看是否打印保存的素材。我现在没有时间将其简化为代码。 (识别开始后将每个
$0保存在一个数组中;在结束时停止保存,如果合适则打印数组并无论如何清除数组。) -
另外,Start 和 End 之间是否有任何数据行?还是它总是一系列 Start..End 行,但只需要打印其中的一些。
-
可以为空,但我只需要中间图案的那个
-
所以该文件可能包含:
Start、1、middle、2、End、Junk、<blank line>、Start、@9876543314,End?Junk和<blank line>不应该包含在输出中吗?只有前 5 行应该回显? -
垃圾行或空行可能在中间提供的开头和结尾内