Adición de un delimitador después de cada archivo procesado dentro de awk
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?
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