gawk

GAWK(1)                       Ãrdenes de Utilidad                      GAWK(1)



NOMBRE
       gawk - lenguaje de análisis y procesamiento de patrones

SINOPSIS
       gawk [ opciones del estilo POSIX o GNU ] -f fichero-de-programa [ -- ]
       fichero ...
       gawk [ opciones del estilo POSIX o GNU ] [ -- ] texto-del-programa
       fichero ...

DESCRIPCIÃN
       Gawk es la implementación del Proyecto GNU del lenguaje de
       programación AWK.  Está conforme con la definición del lenguaje en
       el POSIX 1003.2 Command Language And Utilities Standard.  Esta versión
       está basada, a su vez, en la descripción de The AWK Programming
       Language, escrito por Aho, Kernighan, y Weinberger, con las caracterÃ‐
       sticas adicionales que aparecen en la versión del System V de UNIX
       awk.  Gawk igualmente provee de las recientes extensiones del awk de
       Bell Labs, y algunas extensiones especÃficas de GNU.

       La lÃnea de orden consiste en opciones para el propio gawk , el texto
       del programa AWK (si no se provee mediante las opciones -f o --file ),
       y los valores que deben estar disponibles en las variables predefinidas
       de AWK ARGC y ARGV .

FORMATO DE LAS OPCIONES
       Las opciones de Gawk pueden seguir tanto el estilo tradicional de
       opciones de una letra de POSIX , como el estilo GNU de opciones largas.
       Las opciones POSIX comienzan con un solo ''-'', mientras que las
       opciones largas lo hacen con ''--''.  Se ofrecen opciones largas tanto
       para las caracterÃsticas especÃficas de GNU como para las caracterÃ‐
       sticas definidas por POSIX.

       Siguiendo el estándar POSIX, las opciones especÃficas de gawk se
       proveen vÃa argumentos con la opción -W .  Pueden añadirse múltiples
       opciones -W .  Cada una de las opciones -W tienen su correspondiente
       opción larga, tal y como de detalla más adelante. Los argumentos de
       las opciones largas deben estar unidas a la opción mediante un signo =
       , sin espacios en blanco, o pueden proveerse en el siguiente argumento
       de la lÃnea de orden.  Las opciones largas pueden ser abreviadas,
       siempre y cuando la abreviatura sea única.

OPCIONES
       Gawk acepta las siguientes opciones.

       -F fs
       --field-separator fs
              Use fs para definir el separador de campos de la entrada (el
              valor de la variable predefinida FS ).

       -v var=val
       --assign var=val
              Asigna el valor val, a la variable var, antes de que la
              ejecución del programa comience.  Estos valores de variable
              están disponibles en el bloque BEGIN de un programa AWK.

       -f fichero-de-programa
       --file fichero-de-programa
              Leer el fuente del programa AWK del fichero fichero-de-programa,
              en vez de obtenerlo del primer argumento de la lÃnea de orden.
              Pueden usarse múltiples opciones -f (o --file).

       -mf NNN
       -mr NNN
              Definir varios lÃmites de memoria al valor NNN.  El indicador f
              define el máximo número de campos, y el indicador r define el
              tamaño máximo de un registro. Estos dos indicadores y la
              opción -m son de la versión de awk para UNIX de la versión de
              investigación de Bell Labs.  Son ignoradas por gawk, ya que
              gawk no tiene lÃmites predefinidos.

       -W traditional
       -W compat
       --traditional
       --compat
              Ejecutar en el modo de compatibilidad .  En este modo de
              funcionamiento, gawk funciona de manera idéntica al awk de UNIX
              ; ninguna de las extensiones especÃficas de GNU son reconocidas.
              Es preferible el uso de la forma --traditional en vez de las
              otras formas de esta opción.  Vea EXTENSIONES DE GNU, más
              adelante, para más información.

       -W copyleft
       -W copyright
       --copyleft
       --copyright
              Imprime una versión corta del mensaje de información sobre
              derechos de copia de GNU en la salida estándar, y termina de
              forma correcta.

       -W help
       -W usage
       --help
       --usage
              Imprime un resumen relativamente corto de las opciones
              disponibles por la salida estándar.  (Siguiendo los GNU Coding
              Standards, estas opciones causan una salida satisfactoria
              inmediata.)

       -W lint
       --lint Genera mensajes de advertencia sobre construcciones que son
              dudosas o no portables para otras implementaciones de AWK.

       -W lint-old
       --lint-old
              Genera mensajes de advertencia sobre construcciones que no son
              portables a la versión original de Unix.  awk.

       -W posix
       --posix
              Esta opción activa el modo de compatibilidad , con las
              siguientes restricciones adicionales:

              · \x las secuencias de escape no son reconocidas.

              · Solo los espacios y los tabuladores actúan como separadores
                de campo cuando FS contiene un único espacio, y no los saltos
                de lÃnea.

              · El sinónimo func para la palabra clave function no es
                reconocido.

              · Los operadores ** y **= no pueden ser usados en vez de ^ y ^=.

              · La función fflush() no está disponible.

       -W re-interval
       --re-interval
              Activa el uso de las expresiones de intervalos en el ajuste de
              expresiones regulares (vea Expresiones Regulares, más
              adelante).  Las expresiones de intervalos no eran soportadas
              tradicionalmente por el lenguaje AWK. El estándar POSIX las
              añadió, para hacer que awk y egrep fueran consistentes entre
              ellos.  De cualquier modo, es probable que su uso entorpezca el
              uso de programas AWK antiguos, por este motivo gawk solo las
              provee si son pedidas mediante esta opción, o si se ha
              especificado --posix .

       -W source texto-del-programa
       --source texto-del-programa
              Usar program-text como el código fuente del programa AWK.  Esta
              opción permite la fácil mezcla de funciones de librerÃa
              (usadas mediante las opciones -f y --file ) con código fuente
              entrado por la lÃnea de orden.  Se ha propuesto primordialmente
              como un medio para agrandar programas AWK usados en scripts de
              shell.

       -W version
       --version
              Imprime información sobre la versión de esta copia de gawk en
              particular por la salida estándar.  Es útil principalmente
              para saber si la copia actual de gawk en su sistema está al dÃa
              respecto con cualquier cosa que la Free Software Foundation
              esté distribuyendo.  También es útil para dar avisos sobre
              fallos.  (Siguiendo los GNU Coding Standards, estas opciones
              causan una salida satisfactoria inmediata.)

       --     Señala el final de las opciones. Es útil para permitir que los
              futuros argumentos al propio programa AWK puedan comenzar
              también por un  ``-''.  Esto es principalmente para mantener la
              consistencia con las convenciones de análisis de argumentos
              usados por la mayorÃa de los restantes programas POSIX.

       En el modo compatibilidad, cualquier otra opción será marcada como
       ilegal, aunque sean ignoradas.  En operación normal, mientras el texto
       del programa haya sido incluido, las opciones no reconocidas son
       pasadas al programa AWK en la tabla ARGV para ser procesadas. Es
       particularmente útil para ejecutar programas AWK mediante el mecanismo
       de intérprete de ejecutables ''#!''.

EJECUCIÃN DE UN PROGRAMA AWK
       Un programa AWK consiste en una secuencia de sentencias tipo patrón-
       acción y definiciones de función opcionales.

              patrón   { sentencias de acción }
              function nombre(lista de parámetros) { sentencias }

       Gawk primero lee el fuente del programa a partir de los fichero(s)-de-
       programa si se han especificado, a partir de los argumentos de
       --source, o a partir del primer argumento que no sea una opción de la
       lÃnea de orden.  Las opciones -f y --source pueden ser usadas más de
       una vez en una lÃnea de orden.  Gawk leerá el texto del programa como
       si todos los fichero(s)-de-programa y textos fuentes de la lÃnea de
       orden hubieran sido concatenados.  Esto es útil para construir
       librerÃas de funciones AWK, sin tener la necesidad de incluirlos en
       cada uno de los nuevos programas AWK que las use. Además ofrece la
       capacidad de mezclar funciones de librerÃa con programas de la lÃnea de
       orden.

       La variable de entorno AWKPATH especifica un camino de búsqueda para
       ser usado cuando se busque los ficheros indicados con la opción -f .
       Si esta variable no existiera, el camino por defecto serÃa
       ".:/usr/local/share/awk".  (El directorio actual puede variar,
       dependiendo de desde donde se compiló e instaló gawk .)  Si un
       fichero dado a la opción -f contiene un carácter ''/'', no se realiza
       ningún tipo de búsqueda.

       Gawk ejecuta los programas AWK en el siguiente orden.  Primero, todas
       las asignaciones de variables especificadas mediante la opción -v se
       realizan.  A continuación, gawk compila el programa en un formato
       interno.  Después, gawk ejecuta el código del/los bloque(s) BEGIN (si
       existe alguno), y a continuación procede a leer cada uno de los
       ficheros nombrados en la tabla ARGV .  Si no existe ningún nombre de
       fichero en la lÃnea de orden, gawk lee de la entrada estándar.

       Si el nombre de un fichero en la lÃnea de orden tiene la forma var=val
       será tratado como una asignación de variable. Se asignará a la
       variable var el valor val.  (Esto ocurre después de que cualquier
       bloque(s) BEGIN haya sido ejecutado.)  Las asignaciones en la lÃnea de
       orden es útil sobre todo para asignar valores de forma dinámica a las
       variables que AWK usa para controlar cómo es troceada la entrada en
       campos y registros. Es también útil para controlar el estado si son
       necesarios múltiples pasos sobre el mismo fichero de datos.

       Si el valor de alguno de los elementos particulares de ARGV está vacÃo
       (""), gawk se lo salta.

       Para cada registro de la entrada, gawk prueba si es posible ajustarlo
       con alguno de los patrones en el programa AWK.  Para cada patrón con
       el cual el registro concuerde, se ejecuta la acción asociada.  Los
       patrones son probados en el orden en que aparecen en el programa.

       Finalmente, después de que toda la entrada se ha terminado, gawk
       ejecuta el código en el/los bloque(s) END (si existiera alguno).

VARIABLES, REGISTROS Y CAMPOS
       Las variables AWK son dinámicas; su existencia comienza cuando son
       usadas por primera vez. Sus valores son números de coma flotante o
       cadenas de caracteres, o ambos, dependiendo de cómo son usadas. AWK
       también dispone de tablas unidimensionales; las tablas
       multidimensionales pueden ser simuladas. Varias variables predefinidas
       se definen cuando un programa comienza a ejecutarse; serán descritas
       cuando convenga y serán resumidas más adelante.

   Registros
       Normalmente, los registros se separan por caracteres de salto de lÃnea.
       Puede controlar cómo son separados los registros asignando valores a
       la variable predefinida RS.  Si RS tiene un único carácter, ese
       carácter separará los registros.  De otro modo, RS se considerará
       como una expresión regular. El texto de la entrada que concuerde con
       esa expresión regular será el que separará los registros.  De todas
       maneras, en el modo compatibilidad, solo el primer carácter de esa
       cadena será usado para separar registros.  Si RS contiene la cadena
       vacÃa, entonces los registros serán separados por espacios en blanco.
       Cuando RS contiene la cadena vacÃa, el carácter de salto de lÃnea
       siempre actúa como separador de campos, añadiéndose a cualquier
       valor que FS pudiera tener.

   Campos
       Conforme cada registro de entrada es leÃdo, gawk divide el registro en
       campos, usando el valor de la variable FS como separados de campos.  Si
       FS tiene un único carácter, los campos serán separados por ese
       carácter.  Si FS contiene la cadena vacÃa, entonces cada carácter
       individual se convierte en separador de campo.  De otro modo, se espera
       que FS sea una expresión regular completa.  En el caso especial de que
       FS tuviera un único espacio en blanco, los campos serÃan separados por
       tiras de espacios y/o tabuladores y/o saltos de lÃnea.  (Vea la
       discusión sobre --posix, más adelante).  Nótese que el valor de
       IGNORECASE (vea más adelante) afectará también a cómo son divididos
       los registros en el caso de que FS fuera una expresión regular, y a
       cómo son separados cuando RS fuera una expresión regular.

       Si la variable FIELDWIDTHS está definida como una lista de número
       separados por espacios, se espera que cada campo tenga ancho fijo, y
       gawk dividirÃa el registro usando los anchos especificados. El valor de
       FS es ignorado es este caso.  Asignar un nuevo valor a FS harÃa
       saltarse el uso de FIELDWIDTHS, y volver a la forma de actuar por
       defecto.

       Cada campo en el registro de entrada puede ser referenciado por su
       posición, $1, $2, etc.  $0 es el registro completo. El valor de un
       campo puede ser también asignado. Los campos no necesitan ser
       referenciados por constantes:

              n = 5
              print $n

       imprime el quinto campo del registro de entrada.  La variable NF se
       define con el número total de campos en el registro de entrada.

       Las referencias a campos que no existen (por ejemplo los campos por
       detrás de $NF) producen la cadena vacÃa. De todas maneras, la
       asignación de un campo no existente (por ejemplo, $(NF+2) = 5)
       incrementarÃa el valor de NF, creando los campos que intervienen como
       cadenas vacÃas, y causando que el valor de $0 fuera recalculado, siendo
       separados los campos mediante el valor de OFS.  Las referencias a
       campos con numeración negativa causan un error fatal.  Decrementar NF
       causa que el valor de los campos que pasen del nuevo número se pierda,
       y el valor de $0 sea recalculado, siendo separados los campos mediante
       el valor de OFS.

   Variables Predefinidas
       Las variables predefinidas de gawk son:

       ARGC        EL número de argumentos en la lÃnea de orden (no incluye
                   las opciones para gawk, o el fuente del programa).

       ARGIND      El Ãndice en ARGV del fichero que actualmente se está
                   procesando.

       ARGV        Tabla con los argumentos de la lÃnea de orden. La tabla
                   está indexada desde el 0 hasta ARGC - 1.  Cambiando
                   dinámicamente el contenido de ARGV permite controlar los
                   ficheros usados para datos.

       CONVFMT     El formato de conversión para números,por defecto "%.6g".

       ENVIRON     Una tabla conteniendo los valores del entorno actual. La
                   tabla se encuentra indexada por el nombre de las variables
                   de entorno, siendo cada elemento el valor para esa variable
                   (por ejemplo, ENVIRON["HOME"] podrÃa ser /home/arnold).
                   Cambiar esta tabla no afecta al entorno de los programas
                   que gawk ejecuta vÃa redirección o la función system() .
                   (Esto podrÃa cambiar en una futura versión de gawk.)

       ERRNO       Si ocurre algún error de sistema tanto por hacer una
                   redirección con getline, durante una lectura con getline,
                   o durante un close(), entonces ERRNO contendrá una cadena
                   de caracteres describiendo el error.

       FIELDWIDTHS Una lista de anchos de campo separados por espacios. Cuando
                   esté definida, gawk analiza la entrada como campos de
                   tamaño fijo, en vez de usando el valor de la variable FS
                   como separador de campo.  La capacidad de trabajar con
                   anchos de campo fijos es todavÃa experimental; las
                   semánticas podrÃan cambiar conforme gawk se vaya
                   desarrollando en el tiempo.

       FILENAME    El nombre del fichero de entrada actual.  Si no se ha
                   especificado ningún fichero en la lÃnea de orden, el valor
                   de FILENAME será ``-''.  De todos modos, FILENAME no está
                   definida dentro de un bloque BEGIN .

       FNR         El número de registro de entrada en el fichero de entrada
                   actual.

       FS          El separador de campo de entrada, un espacio por defecto.
                   Vea Fields, más arriba.

       IGNORECASE  Controla la sensibilidad a mayúsculas de todas las
                   expresiones regulares y operaciones con cadenas. Si
                   IGNORECASE tiene un valor diferente de cero, entonces las
                   comparaciones entre cadenas y las comprobaciones de
                   patrones en las reglas, la división de campos con FS, la
                   separación de registros con RS, la comprobación de
                   expresiones regulares con ~ y !~, y las funciones
                   predefinidas gensub(), gsub(), index(), match(), split(), y
                   sub() ignorarán la diferencia entre minúsculas y
                   mayúsculas cuando realicen operaciones con expresiones
                   regulares.  De este modo, si IGNORECASE no es igual a cero,
                   /aB/ concuerda con todas las cadenas "ab", "aB", "Ab", y
                   "AB".  Como con todas las otras variables de AWK, el valor
                   inicial de IGNORECASE es cero, por lo que todas las
                   operaciones con expresiones regulares y cadenas son
                   normalmente sensibles a las mayúsculas.  Bajo Unix, el
                   conjunto de caracteres ISO 8859-1 Latin-1 es usado cuando
                   se ignoran las mayúsculas.  NOTA: En versiones de gawk
                   anteriores a la 3.0, IGNORECASE solo afectaba a las
                   operaciones con expresiones regulares. Ahora también
                   afecta a las comparaciones de cadenas.

       NF          El número de campos en el registro de entrada actual.

       NR          El número total de registros de entrada que han aparecido
                   desde el principio.

       OFMT        El formato de salida para los números, por defecto es
                   "%.6g".

       OFS         El separador de campos de salida, un espacio por defecto.

       ORS         El separador de registros de salida, por defecto un salto
                   de lÃnea.

       RS          El separador de registros de entrada, por defecto un salto
                   de lÃnea.

       RT          El terminador de los registros.  Gawk define RT con el
                   texto de entrada que concordó con el carácter o
                   expresión regular especificada por RS.

       RSTART      El Ãndice del primer carácter concordado por match(); 0 si
                   no concordó ninguno.

       RLENGTH     La longitud de la cadena concordada por match(); -1 si no
                   concordó ninguna.

       SUBSEP      El carácter usado para separar múltiples subÃndices en
                   elementos de tipo tabla, por defecto "\034".

   Tablas
       Las tablas se indexan mediante una expresión entre corchetes ([ y ]).
       Si la expresión es una lista de expresiones (expr, expr ...)  entonces
       el Ãndice de la tabla es una cadena de caracteres resultado de la
       concatenación de los valores (cadenas) de cada una de las expresiones,
       separados por el valor de la variable SUBSEP Esta capacidad se utiliza
       para simular tablas de múltiples dimensiones.  Por ejemplo:

              i = "A"; j = "B"; k = "C"
              x[i, j, k] = "hola, mundo\n"

       asigna la cadena "hola, mundo\n" al elemento de la tabla x que está
       indexado por la cadena "A\034B\034C". Todas las tablas en AWK son
       asociativas, es decir, indexadas por valores de tipo cadena.

       El operador especial in puede ser usado en las órdenes if o while para
       comprobar si una tabla contiene un Ãndice consistente en un valor
       particular.

              if (val in tabla)
                   print tabla[val]

       Si la tabla tiene múltiples subÃndices, use (i, j) in tabla.

       La construcción in también puede usarse en bucles de tipo for para
       iterar sobre todos los elementos de una tabla.

       Un elemento puede ser eliminado de una tabla usando la orden delete La
       orden delete puede ser usada también para borrar completamente los
       contenidos de una tabla, simplemente especificando el nombre de la
       tabla sin ningún Ãndice.

   Tipado de Variables y Conversiones
       Las variables y los campos pueden ser números (de coma flotante), o
       cadenas de caracteres, o ambos. Dependerá del contexto cómo será
       interpretado el valor de una variable. Si se usa en una expresión
       numérica, será tratado como número, si se usa como una cadena será
       tratada como una cadena.

       Para forzar que una variable sea tratada como un número, sumele un 0;
       para forzar que sea tratada como una cadena, concaténela con la cadena
       vacÃa.

       Cuando una cadena debe ser convertida a número, la conversión se
       realiza usando atof(3).  Un número es convertido en cadena usando el
       valor de CONVFMT como cadena de formato para sprintf(3), con el valor
       numérico de la variable como el argumento.  De todas maneras, aunque
       todos los números en AWK son reales de coma flotante, los valores
       enteros son siempre convertidos como enteros. De tal manera que, dados

              CONVFMT = "%2.2f"
              a = 12
              b = a ""

       la variable b contendrá el valor de tipo cadena "12" y no "12.00".

       Gawk realiza comparaciones tal y como sigue: Si dos variables son
       numéricas, son comparadas numéricamente.  Si un valor es numérico y
       el otro tiene un valor de tipo cadena que es un ``cadena numérica'',
       entonces las comparaciones se hacen numéricamente. En otro caso, el
       valor numérico es traducido a cadena y se comparan en forma de cadena.
       Dos cadenas se comparan, por supuesto, en forma de cadena.  De acuerdo
       con el estándar POSIX, si dos cadenas fueran cadenas numéricas
       deberÃa realizarse una comparación numérica. De todas maneras, esto
       es claramente incorrecto, y gawk no lo hace asÃ.

       Nótese que las constantes de tipo cadena, como "57", no son cadenas
       numéricas, sino constantes de cadena. La idea de ``cadena numérica''
       solo se aplica a los campos, entradas con getline , los elementos de
       FILENAMEy ARGV , elementos de ENVIRON y los elementos de una tabla
       creada mediante split() que son cadenas numéricas.  La idea básica es
       que las entradas de usuario, y solo las entradas de usuario, que
       parezcan numéricas, serán tratadas de esta manera.

       Las variables sin inicializar tendrán el valor numérico 0 y la cadena
       "" (cadena nula o vacÃa).

PATRONES Y ACCIONES
       AWK es un lenguaje orientado a la lÃnea. Primero se indica el patrón,
       y luego la acción. Las sentencias de las acciones se engloban mediante
       { y }.  Puede no indicarse el patrón o la acción, pero por supuesto,
       no ambos.  Si no se especifica el patrón, la acción será ejecutada
       por cada uno de los registros individuales de la entrada.  Si no se
       especifica la acción es equivalente a escribir la acción

              { print }

       la cual imprime el registro completo.

       Los comentarios comienzan con el carácter ``#'', y continúan hasta el
       final de la lÃnea.  Pueden usarse lÃneas en blanco para separar
       sentencias.  Normalmente, una sentencia termina con un salto de lÃnea,
       aunque este no es el caso de las lÃneas que finalizan con un ``,'', {,
       ?, :, &&, o ||.  Las lÃneas que terminan con do o else también se
       considera que continúan en la siguiente lÃnea. En otros casos, una lÃ‐
       nea podrá ser continuada en la siguiente poniendo al final un ``\'',
       en cuyo caso se ignorará el salto de lÃnea.

       Se pueden poner múltiples sentencias en la misma lÃnea separándolos
       mediante un ``;''.  Esto se aplica tanto para las sentencias que
       componen la parte de la acción de un par patrón-acción (el caso más
       usual), como para las propias sentencias patrón-acción.

   Patrones
       Los patrones de AWK pueden ser uno de los siguientes:

              BEGIN
              END
              /expresión regular/
              expresión relacional
              patrón && patrón
              patrón || patrón
              patrón ? patrón : patrón
              (patrón)
              ! patrón
              patrón1, patrón2

       BEGIN y END son dos patrones de tipo especial que no son utilizados
       para comprobarlos contra la entrada.  Las acciones de todos los
       patrones BEGIN se juntan como si todas las sentencias hubieran sido
       escritas en un único bloque BEGIN .  Son ejecutadas antes de que se
       lea algo de la entrada. De forma análoga, todos los bloques END se
       juntan, y son ejecutados cuando se ha agotado toda la entrada (o cuando
       se ejecuta una sentencia exit ).  Los patrones BEGIN y END no pueden
       ser combinados con otros patrones en expresiones de patrón.  Los
       patrones BEGIN y END no pueden tener vacÃa la parte de la acción.

       Para los patrones con /expresiones regulares/ , la sentencia asociada
       se ejecuta para cada registro de entrada que concuerde con la
       expresión regular.  Las expresiones regulares son las mismas que las
       usadas en egrep(1), y se encuentran resumidas más adelante.

       Una expresión relacional puede usar cualquiera de los operadores
       definidos en la parte de acciones de esta sección. Estas generalmente
       comprueban si ciertos campos concuerdan con una cierta expresión
       regular.

       Los operadores &&, ||, y !  son respectivamente la Y lógica, la O
       lógica, y la NO lógica, como en C.  Hacen evaluaciones de circuito
       corto, también como en C, y se usan para combinar varias expresiones
       de patrón primitivas. Como en la mayorÃa de los lenguajes, pueden
       usarse paréntesis para cambiar el orden de la evaluación.

       El operador ?: es igual que el mismo operador en C. Si el primer
       patrón es cierto el patrón usado para las comprobaciones es el
       segundo, en caso contrario es el tercero. De entre el segundo y el
       tercer patrón, solo es evaluado uno de ellos.

       La forma patrón1, patrón2 para una expresión recibe el nombre de
       rango de patrones.  Concuerda con todos los registros de la entrada que
       existan entre el registro que concuerde con patrón1, y el registro que
       concuerde con patrón2, inclusive. No combina con ningún otro tipo de
       expresión de patrón.

   Expresiones Regulares
       Las expresiones regulares corresponden con el tipo extendido usado en
       egrep.  Están compuestas por caracteres como sigue:

       c          concuerda con el carácter c(nometacarácter).

       \c         concuerda con el carácter literal c.

       .          concuerda con cualquier carácter incluyendo el salto de lÃ‐
                  nea.

       ^          concuerda con el principio de una cadena.

       $          concuerda con el fin de una cadena.

       [abc...]   lista de caracteres, concuerda con cualquiera de los
                  caracteres abc....

       [^abc...]  lista negada de caracteres, concuerda con cualquier
                  carácter excepto abc....

       r1|r2      alternativa: concuerda con r1 o r2.

       r1r2       concatenación: concuerda con r1, y después con r2.

       r+         concuerda con una o más apariciones de r.

       r*         concuerda con cero o más apariciones de r.

       r?         concuerda con cero o una aparición de r.

       (r)        agrupación: concuerda con r.

       r{n}
       r{n,}
       r{n,m}     Uno o dos números entre llaves denotan una expresión de
                  intervalo.  Si hay un número entre llaves, la expreg.
                  precedente r se repite n veces. Si hay dos números
                  separados por una coma, r se repite de n a m veces.  Si hay
                  un número seguido de una coma, entonces r se repite como
                  mÃnimo n veces.
                  Las expresiones de intervalo solo están disponibles si se
                  especifica --posix o --re-interval en la lÃnea de orden.

       \y         concuerda con la cadena vacÃa tanto en el principio como en
                  el final de una palabra.

       \B         concuerda con la cadena vacÃa dentro de una palabra.

       \<         concuerda con la cadena vacÃa al principio de una palabra.

       \>         concuerda con la cadena vacÃa al final de una palabra.

       \w         concuerda con cualquier carácter constitutivo de palabra
                  (letra, dÃgito, o subrayado.)

       \W         concuerda con cualquier carácter que no es constitutivo de
                  palabra.

       \`         concuerda con la cadena vacÃa al principio de un búfer
                  (cadena).

       \'         concuerda con la cadena vacÃa al final de un búfer.

       Las secuencias de escape que son válidas en las constantes de cadena
       (vea abajo) son también legales en las expresiones regulares.

       Las clases de caracteres son una nueva caracterÃstica introducida en el
       estándar POSIX. Una clase de caracteres es una notación especial para
       describir listas de caracteres que tienen un atributo especÃfico, pero
       donde los caracteres en sà mismos pueden variar entre paÃses diferentes
       y/o entre juegos de caracteres diferentes. Por ejemplo, la noción de
       lo que es un carácter alfanumérico difiere entre los EEUU y Francia.

       Una clase de caracteres solo es válida en una expreg dentro de las
       llaves de una lista de caracteres. Las clases de caracteres consisten
       en [:, una palabra clave que denota la clase, y :].  Estas son las
       clases de caracteres definidas por el estándar POSIX.

       [:alnum:]
              Caracteres alfanuméricos.

       [:alpha:]
              Caracteres alfabéticos.

       [:blank:]
              Espacio en blanco o tabulador.

       [:cntrl:]
              Caracteres de control.

       [:digit:]
              Caracteres numéricos.

       [:graph:]
              Caracteres que son imprimibles y visibles al mismo tiempo.  (Un
              espacio en blanco es imprimible, pero no visible, mientras que
              una a es las dos cosas.)

       [:lower:]
              Caracteres alfabéticos en minúscula.

       [:print:]
              Caracteres imprimibles (aquellos que no tienen caracteres de
              control.)

       [:punct:]
              Caracteres de puntuación (aquellos que no son letras, dÃgitos,
              caracteres de control, o caracteres de espaciado.)

       [:space:]
              Caracteres de espaciado (como el espacio en blanco, el
              tabulador, y el salto de página, por nombrar algunos.)

       [:upper:]
              Caracteres alfabéticos en mayúscula.

       [:xdigit:]
              Caracteres que son dÃgitos hexadecimales.

       Por ejemplo, antes del estándar POSIX, para concordar caracteres
       alfanuméricos, tendrÃa que haber escrito /[A-Za-z0-9]/.  Si su juego
       de caracteres contiene otros caracteres alfabéticos, esta
       especificación no los hubiera recogido. Usando las clases de
       caracteres de POSIX, puede escribir /[[:alnum:]]/, y esto concordarÃa
       con todos los caracteres alfabéticos y numéricos de su juego de
       caracteres.

       Adicionalmente en las listas de caracteres pueden aparecer dos
       secuencias especiales. Esto se aplica a los juegos de caracteres no
       ASCII, los cuales pueden contener sÃmbolos (llamados elementos
       equivalentes) los cuales son representados por más de un carácter, al
       igual que varios caracteres que son equivalentes para propósitos de
       comparación u ordenación.  (Por ejemplo, en Español, una ``e''
       normal y una con tilde "á" son equivalentes.)

       SÃmbolos Equivalentes
              Un sÃmbolo equivalente es un elemento formado por más de un
              carácter englobado entre [.  y .].  Por ejemplo, si ch es un
              elemento equivalente, entonces [[.ch.]]  es una expresión
              regular que se ajusta con este elemento equivalente, mientras
              que [ch] es una expresión regular que se ajusta con una c o con
              una h.

       Clases de Equivalencia
              Una clase de quivalencia es un nombre (especÃfico para una
              localización determinada) para una lista de caracteres que son
              equivalentes. El nombre se engloba entre [= y =].  Por ejemplo,
              el nombre e puede ser utilizado para representar a todos estos:
              ``e,'' ``è,'' y ``é.''  En este caso, [[=e]] es una expresión
              regular que se ajusta con
               .BR e ,
               .BR è , o
               .BR é .

       Estas caracterÃsticas son especialmente útiles para las localizaciones
       de habla no inglesa.  Las funciones de librerÃa que usa gawk para el
       ajuste de expresiones regulares solo reconoce las clases de caracteres
       POSIX; no reconocen ni los sÃmbolos equivalentes ni las clases de
       equivalencia.

       Los operadores \y, \B, \<, \>, \w, \W, \`, y \' son especÃficos para
       gawk; son extensiones basadas en las capacidades de las librerÃas de
       expresiones regulares de GNU.

       Varias opciones de la lÃnea de ordenes controlan cómo gawk interpreta
       los caracteres en las expresiones regulares.

       Sin opciones
              En el caso por defecto, gawk provee de todas las posibilidades
              de las expresiones regulares de POSIX y los operadores de
              expresiones regulares de GNU descritos anteriormente.  Aun con
              todo, no son soportadas las expresiones de intervalo.

       --posix
              Solo se aceptan las expresiones regulares de POSIX, los
              operadores de GNU no son considerados especiales.  (Por ejemplo,
              \w concuerda con el literal w).  Las expresiones regulares
              están permitidas.

       --traditional
              Se aceptan las expresiones regulares de la implementación
              tradicional de awk de Unix. Los operadores de GNU no se
              consideran especiales, no se permiten las expresiones de
              intervalo, ni tampoco las clases de caracteres de POSIX
              ([[:alnum:]] y el resto.)  Los caracteres descritos mediante
              secuencias de escape en octal o hexadecimal son tratados
              literalmente, incluso si representan metacaracteres de
              expresiones regulares.

       --re-interval
              Permiten las expresiones de intervalo en las expresiones
              regulares, aunque se haya indicado --traditional

   Acciones
       Las sentencias de las acciones se engloban entre llaves, { y }.  Las
       sentencias de las acciones consisten en las habituales sentencias de
       asignación, condicionales y bucles que pueden encontrarse en la
       mayorÃa de los lenguajes. Los operadores, sentencias de control, y
       sentencias de entrada/salida disponibles son parecidas a las
       equivalentes de C.

   Operadores
       Los operadores en AWK, en orden decreciente de precedencia, son

       (...)       Agrupación.

       $           Referencia a campo.

       ++ --       Incremento y decremento, tanto en forma prefija como
                   sufija.

       ^           Exponenciación (también puede usarse ** , y **= para el
                   operador de asignación.)

       + - !       Más y menos unarios, y negación lógica.

       * / %       Multiplicación, división, y resto de división.

       + -         Suma y resta.

       space       Concatenación de cadenas.

       < >
       <= >=
       != ==       Operadores de relación tradicionales.

       ~ !~        Cotejo de expresión regular, cotejo negado.  NOTA: No use
                   una expresión regular constante (/pepe/) en la parte
                   izquierda de una ~ o una !~.  Sólo usela en la parte
                   derecha. La expresión /pepe/ ~ exp tiene el mismo
                   significado que (($0 ~ /foo/) ~ exp).  Esto normalmente no
                   es lo que se pretendÃa.

       in          Pertenencia a una tabla.

       &&          Y lógica.

       ||          O lógica.

       ?:          Expresión condicional de C. Tiene la forma expr1 ? expr2 :
                   expr3. Si expr1 es cierta, el valor de la expresión es
                   expr2, en caso contrario es expr3.  Solo uno de los dos (
                   expr2 y expr3 ) son evaluados.

       = += -=
       *= /= %= ^= Asignación. Tanto las asignaciones absolutas (var = valor)
                   como las asignaciones de operador (las otras formas) son
                   aceptadas.

   Sentencias de control
       Las sentencias de control son las siguientes:

              if (condición) sentencia [ else sentencia ]
              while (condición) sentencia
              do sentencia while (condición)
              for (expr1; expr2; expr3) sentencia
              for (var in tabla) sentencia
              break
              continue
              delete tabla[Ãndice]
              delete tabla
              exit [ expresión ]
              { sentencias }

   Sentencias de E/S
       Las sentencias de entrada/salida son las siguientes:

       close(fichero)         Cerrar fichero (o tuberÃa, vea más abajo.)

       getline                Asignar a $0 el siguiente registro de entrada;
                              modifica NF, NR, FNR.

       getline <fichero       Asignar a $0 el siguiente registro de fichero;
                              modifica NF.

       getline var            Asignar a var el siguiente registro de entrada;
                              modifica NR, FNR.

       getline var <fichero   Asignar a var el siguiente registro de fichero.

       next                   Parar el procesado del registro de entrada
                              actual. Se lee el siguiente registro de entrada
                              y el procesado vuelve a comenzar con el primer
                              patrón del programa AWK. Si se llega al final
                              de los datos de entrada, el/los bloque(s) END ,
                              si existen, son ejecutados.

       nextfile               Parar el procesado del fichero de entrada
                              actual. La siguiente lectura de un registro de
                              entrada se obtiene del siguiente fichero de
                              entrada.  Se modifican FILENAME y ARGIND , FNR
                              se actualiza a 1, y el procesado comienza de
                              nuevo por el primer patrón del programa AWK. Si
                              se llega al final de los datos de entrada,
                              el/los bloque(s) END , si existen, son
                              ejecutados.  NOTA: Versiones antiguas de gawk
                              usaban next file, como dos palabras. Aunque esta
                              forma se reconoce todavÃa, genera un mensaje de
                              alerta y será eliminado en futuras versiones.

       print                  Imprime el registro actual.  El registro de
                              salida se termina con el valor de la variable
                              ORS .

       print lista-expr       Imprime expresiones.  Cada expresión se separa
                              por el valor de la variable OFS .  El registro
                              de salida se termina con el valor de la variable
                              ORS .

       print lista-expr >fichero
                              Imprime expresiones en fichero.  Cada expresión
                              se separa por el valor de la variable OFS .  El
                              registro de salida se termina con el valor de la
                              variable ORS .

       printf fmt, lista-expr Dar formato e imprimir.

       printf fmt, lista-expr >fichero
                              Dar formato e imprimir en fichero.

       system(lÃnea-de-orden) Ejecutar la orden lÃnea-de-orden, y devuelve el
                              valor de salida.  (Esto puede no estar
                              disponible en sistemas no POSIX .)

       fflush([fichero])      Descargar cualquier búfer asociado con el
                              fichero o tuberÃa de salida abierto.  Si no se
                              especifica fichero , entonces se descarga la
                              salida estándar.  Si fichero es la cadena vacÃ‐
                              a, entonces todos los búfers de los ficheros y
                              tuberÃas de salida abiertos son descargados.

       También se permiten redirecciones de entrada/salida. Para print y
       printf, >>fichero añade la salida a fichero, mientras que | orden
       escribe en una tuberÃa.  De forma similar, orden | getline escribe
       mediante una tuberÃa en getline.  La orden getline retornará 0 en el
       final del fichero, y -1 en caso de error.

   La sentencia printf
       Las versiones AWK de la sentencia printf y de la función sprintf()
       (véase a continuación) aceptan la siguiente especificación para
       formatos de conversión:

       %c     Un carácter ASCII .  Si el argumento usado para %c es
              numérico, es tratado como un carácter e imprimido. De otro
              modo, el argumento se asume que es una cadena, y solo se imprime
              el primer carácter de esa cadena.

       %d
       %i     Un número decimal (la parte entera).

       %e
       %E     Un número real de coma flotante de la forma [-]d.dddddde[+-]dd.
              El formato %E usa E en vez de e.

       %f     Un número real de coma flotante de la forma [-]ddd.dddddd.

       %g
       %G     Usese la conversión %e o %f , la que sea más corta,
              suprimiendo los ceros no significativos.  El formato %G usa %E
              en vez de %e.

       %o     Un número sin signo en octal (entero.)

       %s     Una cadena de caracteres.

       %x
       %X     Un número sin signo en hexadecimal (entero.)  El formato %X usa
              ABCDEF en vez de abcdef.

       %%     Un carácter % ; no se utiliza ningún argumento.

       Estos son parámetros opcionales que pueden ponerse entre el % y la
       letra de control:

       -      La expresión debe ser justificada por la izquierda dentro de su
              campo.

       espacio
              Para conversiones numéricas, pone un espacio en blanco como
              prefijo en los valores positivos, y un signo negativo en los
              valores negativos.

       +      EL signo más, usado antes del modificador de anchura (vea más
              adelante), indica que siempre debe ponerse el signo en las
              conversiones numéricas, aunque el dato a dar formato sea
              positivo. El + anula el modificador de espacio.

       #      Usa una ``forma alternativa'' para ciertas letras de control.
              Para %o, añade un cero inicial.  Para %x, y %X, añade un 0x o
              0X inicial para resultados diferentes de cero.  Para %e, %E, y
              %f, El resultado contendrá siempre un punto decimal.  Para %g,
              y %G, Los ceros al final no serán eliminados del resultado.

       0      Un 0 (cero) inicial actúa como una bandera, indica que la
              salida debe ser rellenada con ceros en vez de con espacios. Esto
              se aplica también para los formatos de salida no numéricos.
              Esta bandera solo tiene efecto cuando la anchura del campo es
              mayor que el valor a imprimir.

       anchura
              El campo tiene que ser rellenado hasta alcanzar la anchura
              indicada. El campo normalmente será rellenado con espacios. Si
              la bandera 0 se está usando, será rellenado con ceros.

       .prec  Un número que especifica la precisión a usar cuando se
              imprima.  Para los formatos %e, %E, y %f , esto especifica el
              número de dÃgitos que desea que se impriman a la derecha del
              punto decimal.  Para los formatos %g, y %G , especifica el
              número máximo de dÃgitos significativos. Para los formatos %d,
              %o, %i, %u, %x, y %X , especifica el número mÃnimo de dÃgitos a
              imprimir. Para una cadena, especifica el número máximo de
              caracteres de la cadena que deben ser imprimidos.

       Las caracterÃsticas de anchura y prec dinámicas de las rutinas
       printf() del ANSI C también son soportadas.  Un * en el lugar de las
       especificaciones de anchura o de prec causará que sus valores sean
       tomados a partir de la lista de argumentos de printf o sprintf().

   Nombres especiales de ficheros
       Cuando se realiza redirección de la E/S tanto desde print como de
       printf en un fichero, o mediante getline a partir de un fichero, gawk
       reconoce internamente ciertos nombres especiales de ficheros. Estos
       nombres de ficheros permiten acceder a descriptores de ficheros
       abiertos heredados del proceso padre de gawk (normalmente el shell.)
       Otros nombres especiales proveen acceso a información sobre la
       ejecución del proceso gawk Los nombres de ficheros son:

       /dev/pid    Leer de este fichero devuelve el ID del proceso actual, en
                   decimal, terminado con un salto de lÃnea.

       /dev/ppid   Leer de este fichero devuelve el ID del proceso padre del
                   actual proceso, en decimal, terminado con un salto de lÃ‐
                   nea.

       /dev/pgrpid Leer de este fichero devuelve el ID del grupo del proceso
                   actual, en decimal, terminado con un salto de lÃnea.

       /dev/user   Leer de este fichero devuelve un registro terminado con un
                   salto de lÃnea. Los campos se separan por espacios en
                   blanco.  $1 el el valor de la llamada a sistema getuid(2) ,
                   $2 es el valor de la llamada a sistema geteuid(2) , $3 es
                   el valor de la llamada a sistema getgid(2) , y $4 es el
                   valor de la llamada a sistema getegid(2) Si hay campos
                   adicionales, son los IDs de grupo devueltos por
                   getgroups(2).  No todos los sistemas soportan múltiples
                   grupos.

       /dev/stdin  La entrada estándar.

       /dev/stdout La salida estándar.

       /dev/stderr La salida de error estándar.

       /dev/fd/n   El fichero asociado con el descriptor de fichero abierto n.

       Son particularmente útiles para los mensajes de error. Por ejemplo:

              print "¡ Error !" > "/dev/stderr"

       donde, de otra manera, tendrÃa que haber usado

              print "¡ Error !" | "cat 1>&2"

       Estos nombres de fichero pueden usarse también en la lÃnea de orden
       para nombrar ficheros de datos.

   Funciones numéricas
       AWK dispone de las siguientes funciones aritméticas predefinidas:

       atan2(y, x)   devuelve el arcotangente de y/x en radianes.

       cos(expr)     devuelve el coseno de expr, la cual está en radianes.

       exp(expr)     la función exponencial.

       int(expr)     truncado a entero.

       log(expr)     logaritmo natural.

       rand()        devuelve un número aleatorio entre 0 y 1.

       sin(expr)     retorna el seno de expr, la cual está en radianes.

       sqrt(expr)    raÃz cuadrada.

       srand([expr]) usa expr como la nueva semilla para el generador de
                     números aleatorios. Si no se indica expr , se usa la
                     hora del dÃa.  El valor de retorno es la anterior semilla
                     del generador.

   Funciones de cadena
       Gawk dispone de las siguientes funciones predefinidas para cadenas:

       gensub(r, s, h [, t])   buscar en la cadena objetivo t si hay ajustes
                               de la expresión regular r.  Si h es una cadena
                               que comienza por g o G, entonces reemplazar
                               todos los ajustes de r por s.  De otro modo, h
                               es un número indicando cual de los ajustes de
                               r debe reemplazarse. Si no se indica t , se usa
                               $0 .  Dentro del texto de reemplazo s, puede
                               usarse la secuencia \n, donde n es un dÃgito de
                               1 a 9, para indicar solo el texto que se ha
                               ajustado con la subexpresión con paréntesis
                               n'ésima.  La secuencia \0 representa el texto
                               ajustado completo, al igual que el carácter &.
                               A diferencia de sub() y gsub(), la cadena
                               modificada se devuelve como resultado de la
                               función, y la cadena objetivo original no es
                               modificada.

       gsub(r, s [, t])        para cada subcadena que ajuste con la
                               expresión regular r en la cadena t, substituye
                               la cadena s, y devuelve el número de
                               sustituciones.  Si no se ha indicado t , se usa
                               $0.  Un & en el texto de reemplazo es
                               sustituido por el texto que ha sido ajustado en
                               ese momento.  Use \& para obtener un & literal.
                               Vea AWK Language Programming para una
                               descripción más detallada sobre las reglas
                               para los & y las barras invertidas en el texto
                               de reemplazo de sub(), gsub(), y gensub().

       index(s, t)             devuelve el Ãndice de la cadena t en la cadena
                               s, o 0 si t no aparece.

       length([s])             devuelve la longitud de la cadena s, o la
                               longitud de $0 si no se indica s .

       match(s, r)             devuelve la posición en s donde aparece la
                               expresión regular r , o 0 si r no aparece, y
                               modifica los valores de RSTART y RLENGTH.

       split(s, a [, r])       divide la cadena s en la tabla a en la
                               expresión regular r, y devuelve el número de
                               campos. Si se omite r , se usa FS .  La tabla a
                               se borra al principio. La división funciona de
                               forma idéntica a la división de campos,
                               descrita anteriormente.

       sprintf(fmt, lista-expr)
                               imprime lista-expr de acuerdo con fmt, y
                               devuelve la cadena resultante.

       sub(r, s [, t])         igual que gsub(), pero solo se reemplaza la
                               primera subcadena que ajusta.

       substr(s, i [, n])      retorna la subcadena de s que comience por i y
                               que tenga como mucho n caracteres.  Si se omite
                               n , se usa el resto de s .

       tolower(cad)            devuelve una copia de la cadena cad, con todos
                               los caracteres en mayúscula de cad cambiados
                               por sus correspondientes en minúscula. Los
                               caracteres no alfabéticos no son modificados.

       toupper(cad)            devuelve una copia de la cadena cad, con todos
                               los caracteres en minúscula de cad cambiados
                               por sus correspondientes en mayúscula. Los
                               caracteres no alfabéticos no son modificados.

   Funciones de tiempo
       Teniendo en cuenta que uno de los principales usos de los programas AWK
       es el procesamiento de ficheros de registro (log files) que contienen
       información de registro de tiempo, gawk proporciona las siguientes
       funciones para obtener registros de tiempo y darles formato.

       systime() devuelve la hora del dÃa actual como el número de segundos
                 desde la Ãpoca (Medianoche UTC del 1 Enero de 1970 en
                 sistemas POSIX).

       strftime([formato [, timestamp]])
                 da formato a timestamp de acuerdo con la especificación en
                 formato.  El timestamp debe tener la misma forma que el
                 retornado por systime().  Si no aparece timestamp , se
                 utiliza la hora del dÃa actual.  Si no aparece formato , se
                 utiliza un formato por defecto equivalente a la salida de
                 date(1).  Vea la especificación de la función strftime() en
                 ANSI C para estar seguro de las conversiones de formato que
                 se garantiza que existen.  Una versión de dominio público
                 de strftime(3) y la correspondiente página de manual se
                 distribuyen con gawk; si se usó esa versión para compilar
                 gawk, entonces todas las conversiones descritas en esa
                 página de manual estarán disponibles para gawk.

   Constantes de cadena
       Las constantes de cadena en AWK son secuencias de caracteres entre
       dobles comillas ( " ).  Dentro de las cadenas, se reconocen
       determinadas secuencias de escape , como en C. Son las siguientes:

       \\   Una barra invertida literal.

       \a   El carácter de ``alerta''; usualmente el carácter ASCII BEL .

       \b   carácter de borrado.

       \f   salto de página.

       \n   salto de lÃnea.

       \r   retorno de carro.

       \t   tabulador horizontal.

       \v   tabulador vertical

       \xdÃgitos hexadecimales
            El carácter representado por la cadena de dÃgitos hexadecimales
            que sigue a la \x.  Como en ANSI C, todos los dÃgitos
            hexadecimales siguientes se consideran como parte de la secuencia
            de escape.  (Esta caracterÃstica nos deberÃa dar una idea sobre el
            diseño de lenguajes del comité.)  Por ejemplo, "\x1B" es el
            carácter ASCII ESC (escape).

       \ddd El carácter representado por la secuencia de 1, 2 o 3 dÃgitos en
            octal. Por ejemplo . "\033" es el carácter ASCII ESC (escape).

       \c   El carácter c literal.

       Las secuencias de escape pueden usarse también dentro de constantes de
       expresiones regulares (p.ej., /[ \t\f\n\r\v]/ se ajusta con espacios en
       blanco).

       En el modo de compatibilidad, los caracteres representados por
       secuencias de escape en octal o hexadecimal son tratados literalmente
       cuando son usados en contantes de expresiones regulares. AsÃ, /a\52b/
       es equivalente a /a\*b/.

FUNCIONES
       La funciones en AWK se definen de la siguiente manera:

              function nombre(lista de parámetros) { sentencias }

       Las funciones se ejecutan cuando son llamadas desde dentro de las
       expresiones tanto desde patrones o acciones. Los parámetros reales
       usados en la llamada a la función se usan para instanciar los
       parámetros formales declarados en la función. Las tablas se pasan por
       referencia, las otras variables se pasan por valor.

       Ya que las funciones no formaban parte originalmente del lenguaje AWK,
       el uso de variables locales es un tanto chapucero: Son declaradas como
       parámetros extra en la lista de parámetros. Por costumbre se separan
       las variables locales de los parámetros reales por espacios en blanco
       adicionales en la lista de parámetros. Por ejemplo:

              function  f(p, q,     a, b)   # a & b son locales
              {
                   .....
              }

              /abc/     { ... ; f(1, 2) ; ... }

       Es necesario que el paréntesis izquierdo en una llamada a función
       siga inmediatamente al nombre de la función, sin añadir ningún
       espacio en blanco. Esto es necesario para evitar ambigüedades
       sintácticas con el operador de concatenación. Esta restricción no se
       aplica a las funciones predefinidas listadas anteriormente.

       Las funciones pueden llamarse las unas a las otras y pueden ser
       recursivas. Los parámetros usados como variables locales son
       inicializados con una cadena vacÃa y el número cero en la invocación
       de la función.

       Si se indicó --lint , gawk generará mensajes de alarma sobre llamadas
       a funciones no definidas en tiempo de análisis, en vez de en tiempo de
       ejecución.  Llamar a una función no definida en tiempo de ejecución
       es un error fatal.

       Puede usarse la palabra func en vez de function.

EJEMPLOS
       Imprimir y ordenar los nombres de ingreso de todos los usuarios:

            BEGIN     { FS = ":" }
                 { print $1 | "sort" }

       Contar las lÃneas de un fichero:

                 { nlines++ }
            END  { print nlines }

       Añadir el número de lÃnea al principio de cada una en el fichero:

            { print FNR, $0 }

       Concatenar y número de lÃnea (una variación del ejercicio):

            { print NR, $0 }

VÃASE TAMBIÃN
       egrep(1), getpid(2), getppid(2), getpgrp(2), getuid(2), geteuid(2),
       getgid(2), getegid(2), getgroups(2)

       The AWK Programming Language, Alfred V. Aho, Brian W. Kernighan, Peter
       J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X.

       AWK Language Programming, Edition 1.0, published by the Free Software
       Foundation, 1995.

COMPATIBILIDAD POSIX
       Un objetivo principal de gawk es la compatibilidad con el estándar
       POSIX, y a su vez la compatibilidad con la última versión del awk de
       UNIX .  Hasta la fecha, gawk incorpora las siguientes capacidades para
       el usuario que no se describen en el libro de AWK, pero que forman
       parte de la versión de Bell Labs de awk, y se encuentran en el
       estándar POSIX .

       La opción -v para asignar variables antes de la ejecución del
       programa es nueva.  El libro dice que las asignaciones de variables de
       la lÃnea de órdenes ocurrirÃan cuando awk abriera el argumento como un
       fichero, lo cual es antes de ejecutar el bloque BEGIN .  De todos
       modos, en implementaciones más modernas, cuando una asignación como
       esta aparece antes que ningún nombre de fichero, la asignación
       ocurrirÃa antes de que el bloque BEGIN fuera ejecutado.  Las
       aplicaciones acostumbran a depender de esta ``caracterÃstica.''  Cuando
       awk fue modificado para acomodarse a su documentación, se añadió
       esta opción para acomodar a las aplicaciones que dependen de esta
       vieja caracterÃstica.  (Esta caracterÃstica fue aceptada tanto por los
       desarrolladores de AT&T como por los de GNU.)

       La opción -W para implementación de caracterÃsticas especÃficas
       pertenece al estándar POSIX.

       Durante el procesado de argumentos, gawk usa la opción especial ``--''
       para señalar el final de los argumentos.  En modo compatibilidad, las
       opciones no definidas darán un mensaje de alerta, pero de todos modos
       son ignoradas.  En operación normal, estos argumentos son pasados al
       programa AWK para que sean procesados.

       El libro de AWK no define el valor de retorno de srand().  El estándar
       POSIX hace que devuelva la semilla que estaba usando, para permitir
       seguir la pista de las secuencias de números aleatorios.  Por este
       motivo, srand() en gawk devuelve igualmente la semilla actual.

       Otras caracterÃsticas nuevas son: El uso de múltiples opciones -f (a
       partir de MKS awk); la tabla ENVIRON ; las secuencias de escape \a, y
       \v (implementadas originalmente en gawk y añadidas en la versión de
       AT&T); las funciones predefinidas tolower() y toupper() (a partir de
       AT&T); y las especificaciones de conversión de ANSI C en printf
       (implementadas por primera vez en la versión de AT&T).

EXTENSIONES DE GNU
       Gawk contiene una serie de extensiones del awk de POSIX.  Se describen
       en esta sección. Las extensiones que se describen aquà pueden
       desactivarse llamando a gawk con la opción --traditional .

       Las siguientes capacidades de gawk no están disponibles en el awk de
       POSIX.

              · La secuencia de escape \x .  (Desactivada con --posix.)

              · La función fflush() .  (Desactivada con --posix.)

              · Las funciones systime(), strftime(), y gensub() .

              · Los nombres de fichero especiales para redirección de E/S no
                son reconocidos.

              · Las variables ARGIND, ERRNO, y RT no son especiales.

              · La variable IGNORECASE y sus efectos no están disponibles.

              · La variable FIELDWIDTHS y la división de campos de ancho
                fijo.

              · El uso de RS como una expresión regular.

              · La habilidad de dividir caracteres individuales usando la
                cadena vacÃa como valor para FS, y como tercer argumento para
                split().

              · No se realiza búsqueda de camino para los ficheros nombrados
                mediante la opción -f .  Por ello, la variable de entorno
                AWKPATH no es especial.

              · El uso de nextfile para abandonar el procesado del fichero de
                entrada actual.

              · El uso de delete tabla para borrar todo el contenido de una
                tabla.

       El libro de AWK no define el valor de retorno de la función close() .
       El close() de gawk devuelve el valor de fclose(3), o pclose(3), cuando
       se esté cerrando un fichero o una tuberÃa, respectivamente.

       Cuando se invoca a gawk con la opción --traditional , si el argumento
       fs para la opción -F es ``t'', entonces se asignará a FS el carácter
       tabulador.  Nótese que escribiendo gawk -F\t ...  simplemente se
       provoca que el shell lo cambie por el literal ``t'', y no pase ``\t'' a
       la opción -F .  Dado que es un caso un tanto especial y bastante
       desagradable,  esta no es la manera por defecto de actuar. Tampoco se
       actúa de esta manera si se ha especificado --posix .  Para tener un
       tabulador como separador de campo, es mejor usar el entrecomillado:
       gawk -F'\t' ....

CAPACIDADES HISTÃRICAS
       Hay dos caracterÃsticas de implementaciones históricas de AWK que gawk
       soporta.  Primera, es posible llamar a la función predefinida length()
       no solamente sin argumento, ¡sino incluso sin paréntesis!  Por eso,

              a = length

       es igual que las siguientes

              a = length()
              a = length($0)

       Esta caracterÃstica se tilda de ``censurable'' en el estándar POSIX, y
       gawk generará un mensaje de alerta sobre su uso si se especifica
       --lint en la lÃnea de orden.

       La otra caracterÃstica es el uso de las sentencias continue o break
       fuera del cuerpo de un bucle while, for, o do .  Las implementaciones
       tradicionales de AWK han tratado este uso de forma equivalente a la
       sentencia next .  Gawk soportará este uso si se especifica
       --traditional en la lÃnea de orden.

VARIABLES DE ENTORNO
       Si POSIXLY_CORRECT existe en el entorno, entonces gawk actúa
       exactamente como si se hubiera especificado --posix en la lÃnea de
       orden.  Si se hubiera especificado --lint , gawk generarÃa un mensaje
       de alerta.

       La variable de entorno AWKPATH puede usarse para proveer a gawk de una
       lista de directorios en la que buscar los ficheros nombrados mediante
       las opciones -f y --file .

FALLOS
       La opción -F no es necesaria dada la caracterÃstica de las
       asignaciones de variables por la lÃnea de orden; se mantiene por
       compatibilidad.

       Si su sistema dispone de soporte para el fichero /dev/fd y los
       asociados /dev/stdin, /dev/stdout, y /dev/stderr , puede obtener
       diferente salida desde gawk a la que podrÃa obtener en un sistema sin
       estos ficheros. Cuando gawk interpreta estos ficheros internamente,
       sincroniza la salida a la salida estándar con la salida a /dev/stdout,
       mientras que en un sistema con estos ficheros, la salida realmente se
       envÃa ficheros abiertos diferentes.

       Los programas de un solo carácter sintácticamente incorrectos tienden
       a sobrepasar la pila del analizador sintáctico, generando un mensaje
       bastante poco útil. Sorprendentemente, estos programas son difÃciles
       de diagnosticas en el caso general, y el esfuerzo para hacerlo
       realmente no merece la pena.

INFORMACIÃN DE LA VERSIÃN
       Esta página de manual documenta la versión 3.0.2 de gawk.

AUTORES
       La versión original de awk para UNIX fue diseñada e implementada por
       Alfred Aho, Peter Weinberger, y Brian Kernighan de AT&T Bell Labs.
       Brian Kernighan continúa con su mantenimiento y mejora.

       Paul Rubin y Jay Fenlason, de la Free Software Foundation, escribió
       gawk, para ser compatible con la versión original de awk distribuida
       en UNIX Seventh Edition. John Woods contribuyó arreglando algunos
       fallos.  David Trueman, con contribuciones de Arnold Robbins, hizo que
       gawk fuera compatible con la nueva versión del awk de UNIX.  Arnold
       Robbins es el actual mantenedor.

       La versión original para DOS fue realizada por Conrad Kwok y Scott
       Garfinkle.  Scott Deifik es el mantenedor actual para DOS.  Pat Rankin
       realizó el paso a VMS, y Michal Jaegermann hizo el paso al Atari ST.
       El paso a OS/2 lo realizó Kai Uwe Rommel, con contribuciones y ayudas
       de Darrel Hankerson.  Fred Fish aportó soporte para el Amiga.

INFORME DE FALLOS
       Si encontrara algún fallo en gawk, envÃe por favor un mensaje
       electrónico a bug-gnu-utils@prep.ai.mit.edu, con una copia de carbón
       a arnold@gnu.ai.mit.edu.  Por favor, incluya su sistema operativo y su
       revisión, la versión de gawk, qué compilador de C usó para
       compilarlo, y el programa de prueba y los datos mÃnimos para reproducir
       el problema.

       Antes de enviar un informe de fallos, haga por favor dos cosas.
       Primero, verifique que dispone de la última versión de gawk.  Muchos
       fallos (normalmente bastante sutiles) son arreglados en cada nueva
       versión, y si la suya está obsoleta, el problema podrÃa estar ya
       arreglado.  Segundo, por favor lea detenidamente tanto esta página de
       manual como el manual de referencia para estar seguro que lo que usted
       piensa que es un fallo realmente lo sea, en vez de una mala
       interpretación del lenguaje.

       Sea lo que sea que haga, NO remita un informe de fallo en
       comp.lang.awk.  Aunque los desarrolladores de gawk leen este grupo de
       noticias de forma ocasional, remitir informes de fallos en dicho grupo
       no es una forma muy segura de hacerlo. Utilice preferiblemente las
       direcciones de correo electrónico anteriores.

RECONOCIMIENTOS
       Brian Kernighan de Bell Labs proveyó de una valiosa asistencia durante
       las pruebas y la eliminación de fallos. Le damos las gracias.

PERMISOS DE COPIA
       Copyright © 1996 Free Software Foundation, Inc.

       Se concede permiso para hacer y distribuir copias literales de esta
       página de manual siempre que se preserven tanto la nota de copyright
       como esta nota de permisos en todas las copias.

       Se concede permiso para copiar y distribuir versiones modificadas de
       esta página de manual bajo las condiciones de la copia literal, siendo
       los resultados completos del trabajo derivado distribuidos bajo los
       términos de una nota de permisos idéntica a esta.

       Se concede permiso para copiar y distribuir traducciones de esta
       página de manual a otros idiomas, bajo las anteriores condiciones para
       versiones modificadas, exceptuando que esta nota de permisos debe
       manifestarse mediante una traducción aprobada por la Fundación.

       Nota del traductor: Dado que la traducción de esta nota no está
       aprobada por la Free Software Foundation, se añade la nota original en
       Inglés.

COPYING PERMISSIONS
       Copyright © 1996 Free Software Foundation, Inc.

       Permission is granted to make and distribute verbatim copies of this
       manual page provided the copyright notice and this permission notice
       are preserved on all copies.

       Permission is granted to process this file through troff and print the
       results, provided the printed document carries copying permission
       notice identical to this one except for the removal of this paragraph
       (this paragraph not being relevant to the printed manual page).

       Permission is granted to copy and distribute modified versions of this
       manual page under the conditions for verbatim copying, provided that
       the entire resulting derived work is distributed under the terms of a
       permission notice identical to this one.

       Permission is granted to copy and distribute translations of this
       manual page into another language, under the above conditions for
       modified versions, except that this permission notice may be stated in
       a translation approved by the Foundation.



Free Software Foundation          19 Dic 1996                          GAWK(1)