GNU/Linux >> Tutoriales Linux >  >> Linux

¿Imprimir línea coincidente y línea enésima de la línea coincidente?

Estoy tratando de imprimir la línea coincidente y la cuarta línea de la línea coincidente (línea que contiene la expresión que estoy buscando).

He estado usando el siguiente código:
sed -n 's/^[ t]*//; /img class="devil_icon/,4p' input.txt

Pero esto solo imprime la línea coincidente.

Esto imprime solo la cuarta línea.
awk 'c&&!--c;/img class="devil_icon/{c=4}' input.txt

Necesito imprimir solo la línea coincidente y la cuarta línea.

Respuesta aceptada:

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 con pattern . Cuando encuentra una coincidencia, almacena el número de registro (NR ) en la matriz nr . También almacena el cuarto registro de NR en la misma matriz. Esto lo hace el nr[NR+4] . Cada registro (NR ) luego se verifica para ver si está presente en el nr matriz, si es así, se imprime el registro.

La segunda solución funciona esencialmente de la misma manera, excepto cuando encuentra el pattern imprime esa línea y luego almacena el cuarto registro delante de él en la matriz nr , luego va al siguiente registro. Luego, cuando awk encuentra este cuarto registro el NR in nr el bloque se ejecutará e imprimirá este registro +4 allí después.

Ejemplo

Aquí hay un archivo de datos de ejemplo, 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

Linux
  1. Informes de E/S desde la línea de comandos de Linux

  2. ¿Manipulación de teclas X y punteros en la línea de comandos?

  3. ¿Cómo reiniciar Icewm desde la línea de comandos?

  4. ¿Mantener solo la primera línea de cada secuencia de líneas consecutivas que coincidan con un patrón?

  5. ¿Adjuntar el texto coincidente a la línea?

Envía y recibe Gmail desde la línea de comandos de Linux

Programe hardware desde la línea de comandos de Linux

Ohcount:el contador y analizador de líneas de código fuente

Cómo cerrar Debian 10 desde la línea de comandos y la GUI

¿Cómo habilitar y deshabilitar las extensiones de Gnome desde la línea de comandos?

MySQL la línea de comando y buscapersonas