Awk在第一图案和第二图案之间印刷线条,其中第二图案出现在第一图案的上方和下方

时间:2016-09-29 20:39:14

标签: 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”直到空行,并且第一场比赛下面的线条与“aaaa”匹配,直到空行。所以搜索应输出:

host      host3  
key1      value  
key2      aaaa  
key3      value  

我不能使用grep,因为每条记录都包含不同数量的行。

2 个答案:

答案 0 :(得分:0)

我想我找到了答案。对于寻找类似解决方案的任何人,您可以使用以下awk:

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

答案 1 :(得分:0)

$ awk -v RS= '/aaaa/' file
host      host3
key1      value
key2      **aaaa**
key3      value
相关问题