En awk, lo harías de la siguiente manera
awk '/pattern/{nr[NR]; nr[NR+4]}; NR in nr' file > new_file`
o
awk '/pattern/{print; nr[NR+4]; next}; NR in nr' file > new_file`
Explicación
La primera solución encuentra todas las líneas que coinciden pattern
. Cuando encuentra una coincidencia, almacena el número de registro ( NR
) en la matriz nr
. También almacena el cuarto registro de NR
la misma matriz. Esto lo hace el nr[NR+4]
. NR
Luego se comprueba cada registro ( ) para ver si está presente en la nr
matriz, de ser así, se imprime el registro.
La segunda solución funciona esencialmente de la misma manera, excepto cuando se encuentra con pattern
que imprime esa línea, y luego almacena el cuarto registro delante de él en la matriz nr
, luego pasa al siguiente registro. Luego, cuando awk
encuentre este cuarto registro, el NR in nr
bloque se ejecutará e imprimirá este registro +4 allí después.
Ejemplo
He aquí un ejemplo de archivo de datos, sample.txt
.
$ cat sample.txt
1
2
3
4 blah
5
6
7
8
9
10 blah
11
12
13
14
15
16
Usando la primera solución:
$ awk '/blah/{nr[NR]; nr[NR+4]}; NR in nr' sample.txt
4 blah
8
10 blah
14
Usando la segunda solución:
$ awk '/blah/{print; nr[NR+4]; next}; NR in nr' sample.txt
4 blah
8
10 blah
14
egrep "pattern" -A4