No awk, você faria da seguinte maneira
awk '/pattern/{nr[NR]; nr[NR+4]}; NR in nr' file > new_file'
ou
awk '/pattern/{print; nr[NR+4]; next}; NR in nr' file > new_file'
Explicação
A primeira solução encontra todas as linhas que correspondem a pattern
. Quando encontra uma correspondência, armazena o número do registro ( NR
) na matriz nr
. Também armazena o 4º registro de NR
no mesmo array. Isso é feito pelo nr[NR+4]
. Cada registro ( NR
) é então verificado para ver se está presente na matriz nr
, em caso afirmativo, o registro é impresso.
A segunda solução funciona essencialmente da mesma maneira, exceto quando encontra o pattern
que imprime a linha e, em seguida, armazena o 4º registro à frente no array nr
, e então vai para o próximo registro. Então, quando awk
encontrar este 4º registro, o NR in nr
bloco será executado e imprimirá este registro +4 depois.
Exemplo
Veja um exemplo de arquivo de dados, sample.txt
.
$ cat sample.txt
1
2
3
4 blah
5
6
7
8
9
10 blah
11
12
13
14
15
16
Usando a primeira solução:
$ awk '/blah/{nr[NR]; nr[NR+4]}; NR in nr' sample.txt
4 blah
8
10 blah
14
Usando a segunda solução:
$ awk '/blah/{print; nr[NR+4]; next}; NR in nr' sample.txt
4 blah
8
10 blah
14