Provided by: manpages-es-extra_0.8a-19_all bug

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)