在awk中,您可以按照以下步骤进行操作
awk '/pattern/{nr[NR]; nr[NR+4]}; NR in nr' file > new_file`
要么
awk '/pattern/{print; nr[NR+4]; next}; NR in nr' file > new_file`
说明
第一个解决方案找到所有匹配的行pattern
。找到匹配项时,它将记录号(NR
)存储在数组中nr
。它还将来自NR
同一阵列的第四条记录存储。这是由nr[NR+4]
。NR
然后检查每个记录(),以查看它是否存在于nr
数组中(如果有的话)。
第二个解决方案的工作方式基本上相同,除了遇到第一个解决方案时,它会pattern
打印该行,然后将第4条记录存储在数组中nr
,然后转到下一条记录。然后,当awk
遇到此第4条记录时,该NR in nr
块将被执行并在此后打印此+4记录。
例
这是示例数据文件sample.txt
。
$ cat sample.txt
1
2
3
4 blah
5
6
7
8
9
10 blah
11
12
13
14
15
16
使用第一种解决方案:
$ awk '/blah/{nr[NR]; nr[NR+4]}; NR in nr' sample.txt
4 blah
8
10 blah
14
使用第二种解决方案:
$ awk '/blah/{print; nr[NR+4]; next}; NR in nr' sample.txt
4 blah
8
10 blah
14
egrep "pattern" -A4