0
我有一堆记录,而且我只想查看字段(或多个字段)与正则表达式模式匹配的记录。只有在使用记录分隔符后才打印具有匹配字段的记录
例如,说我的数据来自于这样一种形式:
Time=181 ms
RequestId=12345
Method=GET
... # other records
EndTime=Tue Mar 5 16:21:03 2015 UTC
EOE
------------------------------------------------------------------------
Time=4003 ms
RequestId=53224
Method=POST
... # other records
EndTime=Tue Mar 5 16:21:09 2015 UTC
EOE
------------------------------------------------------------------------
之前,我已经做了它的方式是使用grep
与-A
和-B
标志提取上下文。
zgrep "16:2[0-5]:" -A 1 -B 10 data.txt
这工作得很好,如果我要寻找一个单一的模式,每个记录行相同量,但一旦我必须寻找自己的模式多领域变得更加复杂。
我想要做的是将这些输入中的每一个分隔成一条记录,然后只打印每个记录中的一个或多个字段匹配我所寻找的模式。
我可以使用RS
将它们拆分成记录,但是如何才能打印具有不同部件匹配的记录?假如我想查找16:20
和16:30
之间的EndTime
以及Time
长于1秒([0-9]{4,}
)的所有记录,当中间可能有任意数量的行时?
awk 'BEGIN { RS = "EOE" } { ??? }' data.txt