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