BEGIN y END son patrones especiales. Ellos no son usados para encajar con registros de entrada. En su lugar, ellos son usados para suministrar al script awk qué hacer antes de empezar a procesar y después de haber procesado los registros de la entrada. Una regla BEGIN se ejecuta una vez, antes de leer el primer registro de entrada. Y la regla END se ejecuta una vez después de que se hayan leído todos los registros de entrada. Por ejemplo:
awk 'BEGIN { print "Análisis de `foo'" }
/foo/ { ++foobar }
END { print "`foo' aparece " foobar " veces." }' Lista-BBS
Este programa averigua cuantas veces aparece la cadena ‘foo’ en el fichero de entrada ‘Lista-BBS’. La regla BEGIN imprime un título para el informe. No hay necesidad de usar la regla BEGIN para inicializar el contador foobar a cero, ya que awk lo hace por nosotros automáticamente.
La segunda regla incrementa el valor de la variable foobar cada vez que se lee de la entrada un registro que contiene el patrón ‘foo’. La regla END imprime el valor de la variable foobar al final de la ejecución.
Los patrones especiales BEGIN y END no pueden ser usados en rangos o con operadores booleanos. Un programa awk podría tener múltiples reglas BEGIN y/o END. Ellas son ejecutadas en el mismo orden que aparecen, todas las reglas BEGIN al principio y todas las reglas END al final.
Las secciones BEGIN y END múltiples pueden ser útiles para escribir funciones de librería, ya que cada librería puede tener su propias reglas BEGIN y END para hacer sus propias inicializaciones y/o limpieza. Avertirle que el orden en el cual las librerías son nombradas en la línea de comandos controla el orden en el que son ejecutadas las reglas BEGIN y END. Por lo tanto tienes que tener cuidado cuando escribas tales reglas en ficheros de librerías para que te dé igual el orden en el que las incluyas en la ejecución. Invocación de awk para más información acerca del uso de funciones de librería.
Si un programa awk tiene solamente una regla BEGIN, y ninguna otra regla, entonces el programa se sale una vez que se ha ejecutado la regla BEGIN, sin llegar a leer los registros del fichero de entrada. Sin embargo, si existe también una regla END, entonces se leerán los registros de la entrada, incluso aunque no haya ninguna otra regla en el programa. Esto es necesario en caso de que la regla END chequee el valor de la variable empotrada NR (número de registros leídos).
Las reglas BEGIN y END deben tener acciones; no existen acciones por defecto para estas reglas, ya que no hay ningún registro actual cuando son ejecutadas.
0 Comentarios