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
、同じ配列の4番目のレコードも保存します。これはによって行われますnr[NR+4]
。NR
次に、すべてのレコード()がチェックされ、nr
配列内に存在するかどうかが確認されます(存在する場合)。
2番目の解決策は基本的に同じ方法で動作します。ただし、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
2番目のソリューションの使用:
$ awk '/blah/{print; nr[NR+4]; next}; NR in nr' sample.txt
4 blah
8
10 blah
14
egrep "pattern" -A4