Pregunta

Tengo varios archivos donde estoy extracción de texto entre dos delimitadores (inicio y fin no incluido). Después de que procesar cada archivo que desea salida se procesó un delimitador que indica el archivo, por ejemplo la cadena "FIN". ¿Cómo iba a añadir el "FIN" cadena a la salida después de cada archivo procesado? Por ejemplo,

decir que tengo dos archivos con el contenido

file1.txt

line 1
line 2
START
I want to extract this text
and this text
END
line 3
line 4

y

file2.txt

line10
line20
START
I also want this text.
END
line 30

Sé que si ejecuta la siguiente:

awk '/START/,/END/{if (!/START/&&!/END/) print}' test*.txt

Me obtendrá el siguiente resultado:

I want to extract this text
and this text
I also want this text.

Sin embargo, la salida que quiero es:

I want to extract this text
and this text
END
I also want this text.
END

¿Cómo consigo la cadena "FIN" añadido a la salida después de procesar cada archivo?

¿Fue útil?

Solución

FNR==1 && NR!=1 {print "END"}
END {print "END"}

Así que tendría que:

awk 'FNR==1 && NR!=1 {print "END"} /START/,/END/{if (!/START/&&!/END/) print} END {print "END"}' test*.txt

Otros consejos

FNR la variable se pone a 0 en cada nuevo archivo, lo que podría tener un disparador en regla (FNR == 0 && NR = 0):

(FNR==0) && (NR!=0) {
  print "END"
}
END {
  print "END"
}

Usted está pidiendo awk para saltar FIN impresión. Deja de hacer eso.

awk '/START/,/END/{if (!/START/) print}' test*.txt
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top