Estoy usando awk
para formatear un archivo de entrada en un archivo de salida. Tengo varios patrones para llenar variables (como "algún patrón" en el ejemplo). Estas variables se imprimen en el formato requerido en el bloque END
. La salida debe realizarse allí porque el orden de aparición en el archivo de entrada no está garantizado, pero el orden en el archivo de salida debe ser siempre el mismo.awk: catch `exit 'en el bloque END
BEGIN {
FS = "=|,"
}
/some pattern/ {
if ($1 == 8) {
var = $1
} else {
# Incorrect field value
exit 1
}
}
END {
# Output the variables
print var
}
Así que mi problema es la declaración exit
en el patrón. Si hay algún error y se invoca este comando, no debería haber ningún resultado o, como máximo, un mensaje de error. Pero como dice el manual de gawk (here), si se invoca el comando exit
en un bloque de patrón, se ejecutará al menos el bloque END
. ¿Hay alguna manera de coger el exit
como:
if (!exit_invoked) {
print var
}
o alguna otra forma de evitar la impresión de la salida en el bloque END
?
Stefan
edición: Se utiliza la solución de Shellter.
Gracias, no pensé en esta simple solución;) Voy a empaquetar esto en una función para no olvidar el conjunto 'exit_invoked'. Stefan – Stefan
@Stefan: Buena idea. Como recordatorio de que tiene esa variable en juego, es posible que desee establecer en el bloque BEGIN, es decir, 'exit_invoked = 0'. Algunos se quejarán de que es innecesario y redundante. No lo haría yo mismo, pero es un buen techinque de auto-documentación. YRMV. Buena suerte. – shellter
Haré esto ya que no escribo el programa 'awk' para mí. Gracias. – Stefan