14. Invocación de awk

Hay dos forma de ejecutar awk: con un programa explícito, o con uno o más ficheros de programas. Aquí aparecen ambas formas; las partes encerradas entre ‘[…]’ son opcionales.

awk [-Ffs] [-v var=valor] [-V] [-C] [-c] [-a] [-e] [--] 'program' fichero...

awk [-Ffs] -f fichero-fuente [-f fichero-fuente ...] [-v var=valor] [-V] [-C] [-c] [-a] [-e] [--] fichero...

Opciones de la línea de comandos

Las opciones comienzan con un signo menos, y consisten en un único carácter. Las opciones y sus significados son los siguientes:

-Ffs

      Fija la variable FS al valor fs (ver la sección Especificando como están separados los campos).

-f source-file

      Indica que el programa awk se encuentra en el fichero-fuente en lugar de en el primer argumento que no es opción.

-v var=valor

      Le asigna a la variable var el valor valor antes de que comience la ejecución del programa. Dichos valores de variables están disponibles dentro de la regla BEGIN (mirar más abajo para una explicación más extensa).

      La opción ‘-v’ solo puede fijar el valor de una variable, pero se pueden especificar tantas variables como se deseen mediante el uso repetido de esta opción: `-v foo=1 -v bar=2'.

-a

      Especifica el uso de la sintáxis de awk tradicional para las expresiones regulares. Esto significa que ‘\’ puede ser usado para quote cualquier expresión regular dentro de corchetes, tal y como sería fuera de ellos. Este modo es actualmente el modo por defecto. Ver la sección Operadores de Expresiones Regulares.

-e

      Especifica el uso de la sintáxis de egrep para las expresiones regulares. Esto significa que ‘\’ no sirve como un carácter de quoting dentro de los corchetes; técnicas ideosincráticas son necesarias para incluir varios caracteres especiales dentro de ellas. Este modo podría convertirse en el modo por defecto en el futuro. Ver la sección Operadores de Expresiones Regulares.

-c

      Especifica modo compatibilidad, en el cuál las extensiones GNU en gawk son deshabilitadas, de forma que gawk se comporta como el awk de Unix. Ver la sección Compatibilidad hacia atrás y Depuración.

-V

      Muestra información de la versión para nuestra copia particular de gawk. De esta forma puedes determinar si tu copia de gawk está actualizada con respecto a la que está distribuyendo actualmente la Fundación de Software Gratuito. Esta opción podría desaparecer en una versión futura de gawk.

-C

      Muestra la versión corta de la Licencia Pública General. Esta opción podría desaparecer en futuras versiones de gawk.

--

      Señala el final de las opciones de la línea de comando. Los siguientes argumentos no son tratados como opciones incluso aunque empezasen con un guión ‘-‘. Esta interpretación de ‘--' sigue las convenciones de parsing de argumentos POSIX.

      Esto es útil si tienes nombres de ficheros que comiencen con un signo ‘-‘, o en shell scripts, si tienes nombres de ficheros que serán especificados por el usuario y que podrían empezar con ‘-‘.

Cualquier otra opción se avisa que es inválida con un mensaje de advertencia, pero sería ignorada de todas formas.

En modo compatibilidad, como caso especial, si el valor de fs suministrado a la opción ‘-F’ es ‘t’, entonces FS toma el carácter tabulador (“\t”). También, las opciones ‘-C’ y ‘-V’ no son reconocidas.

Si no se usa la opción ‘-f’, entonces el primer argumento de la línea de comando que no sea opción se espera que sea el programa.

La opción ‘-f’ podría ser usada más de una vez en la línea de comando. Entonces awk lee su programa fuente de todos los ficheros nombrados, tal y como si fuesen concatenados juntos en un único fichero grande. Esto es útil para crear librerías de funciones awk. Funciones útiles pueden ser escritas una vez, y entonces recuperadas desde un lugar estándar, en lugar de tener que ser incluídas en cada programa individual. Puedes aún teclear un programa en el terminal y usar funciones de librería, especificando ‘-f /dev/tty’. Awk leerá un fichero desde el terminal para usarlo como parte del programa awk. Después de teclear tu programa, teclee Control-d (el carácter final de fichero) para finalizarlo.

Otros argumentos de la línea de comandos

Cualesquiera argumentos adicionales en la línea de comando son tratados normalmente como ficheros de entrada a ser procesados en el orden especificado. Sin embargo, un argumento tiene la forma variable=valor, lo que significa asignar el valor valor a la variable variable.

Todos estos argumentos están disponibles para tu programa awk en el array ARGV (Ver la sección 12. Variables Implícitas (Built-in). Las opciones de la línea de comando y el texto del programa (si está presente) son omitidos del array ARGV. Todos los otros argumentos, incluído la asignación de variables son incluídos en el array ARGV.

La distinción entre los argumentos nombres de ficheros y argumentos de asignación de variables se hace cuando awk va a abrir el siguiente fichero de entrada. En ese punto de la ejecución, chequea el “nombre de fichero” para ver si es realmente un asignación de variable; si es así, awk fija el valor de la variable en lugar de leer el fichero.

Por lo tanto, las variables reciben realmente su valor, los valores especificados, después de que todos los ficheros especificados previamente hayan sido leídos. En particular, los valores de variables asignadas en esta fashion no están disponibles en la regla BEGIN (Ver la sección Los Patrones Especiales BEGIN y END), ya que tales reglas se ejecutan antes de que awk comienze el escaneo de la lista de argumentos.

En algunas implementaciones previas de awk, cuando la asignación de variable ocurría antes de cualquiera de los nombres de ficheros, la asignación sucedería antes de que se ejecute la regla BEGIN. Algunas aplicaciones pueden ser dependientes de esta “característica”.

La característica de asignación de variable es más útil para asignar valores a variables tales como RS, OFS y ORS, las cuales controlan los formatos de entrada y salida, antes del escaneo de los ficheros de datos. También es útil para controlar el estado si se necesitan múltiples pasadas sobre un fichero de datos. Por ejemplo:

awk 'pass == 1  { pass 1 stuff }

     pass == 2  { pass 2 stuff }' pass=1 datafile pass=2 datafile

La variable de entorno AWKPATH

La sección anterior describió como los ficheros de programas awk pueden ser especificados desde la línea de comando con la opción ‘-f’. En algunas implementaciones de awk, debes suministrar el path y nombre de fichero preciso para cada fichero de programa, a menos que el fichero se encuentre en el directorio actual.

Pero en gawk si el nombre de fichero suministrado en la opción ‘-f’ no contiene el carácter ‘/’, entonces gawk busca en una lista de directorios (llamados el path o camino de búsqueda), uno por uno, buscando un fichero con el nombre especificado.

El camino de búsqueda es realmente una cadena que contiene directorios separados por dos puntos. Gawk obtiene su camino de búsqueda de la variable de entorno AWKPATH. Si la variable no existe, gawk utiliza el path por defecto, el cual es: `.:/usr/lib/awk:/usr/local/lib/awk'.

La característica de camino de búsquea es particularmente útil para la construcciones de útiles librerías de funciones de awk. Los ficheros de librería pueden ser colocados en un directorio estándar que esté en el camino por defecto, y después especificarlo en la línea de comando con un nombre de fichero corto. Si no, habría que teclear el nombre de fichero completo para cada fichero.

La búsqueda de path no es realizada por gawk en modo compatibilidad. Ver la sección de 13. Invocación de awk.

Nota: Si quieres que se encuentren ficheros del directorio actual, debes incluir el directorio actual en el path, o escribiendo ‘.’ o escribiendo el path completo del directorio. (Una entrada nula se indica comenzando o empezando el path con dos puntos ‘:’, o colocando dos caracteres de dos puntos consecutivos (‘::’)). Si el directorio actual no está incluído en el path, entonces los ficheros no pueden ser encontrados en el directorio actual. Este mecanismo de búsqueda de path es identico al de la shell.

   
Índice
Manual