2016-09-29 79 views
1

我試圖打印包括第一個匹配在內的所有線條,直到第二個匹配發生在第一個匹配的上方和下方第一場比賽。Awk在第一個圖案和第二個圖案之間打印線條,其中第二個圖案出現在第一個圖案的上方和下方

的文件我已經包含由空行像下面隔開的記錄,

host  host1 
key1  value 
key2  value 
key3  value 

host  host2 
key1  value 
key2  value 
key3  value 
key4  value 
key5  value 

host  host3 
key1  value 
key2  **aaaa** 
key3  value 

host  host3 
key1  value 
key2  value 

比方說,我的搜索模式是「AAAA」。我想在第一個匹配上面打印行,直到空行,並且第一行下面的行與「aaaa」匹配,直到空行。所以搜索應該輸出:

host  host3 
key1  value 
key2  aaaa 
key3  value 

我不能使用grep,因爲每個記錄將包含不同數量的行。

回答

0
$ awk -v RS= '/aaaa/' file 
host  host3 
key1  value 
key2  **aaaa** 
key3  value 
+0

謝謝你的作品....如果有多於一個匹配,如何在記錄之間添加一個空行? – user6901586

+0

還有一件事我該如何讓RS不區分大小寫? – user6901586

+0

要在輸出記錄之間打印空白行,請添加-v ORS ='\ n \ n''並且由於RS爲空,因此不區分大小寫,因爲不涉及任何情況。 –

0

我想我找到了答案。爲尋找類似的解決方案,你可以使用下面的AWK:

awk 'BEGIN{ RS="\n\n"; FS="\n"; } /aaaa/ {print}' << inputfile 
+0

雖然這會產生你所期望的輸出,它是不必要的呆子特定由於多字符RS,使用不必要的輸入重定向,根本沒有理由設置FS,並冗餘地指定默認行爲。有關正確的方法,請參閱http://stackoverflow.com/a/39783262/1745001。 –

相關問題