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

NOMBRE

       gawk - lenguaje de analisis 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'ON

       Gawk es la implementacion del Proyecto GNU del lenguaje de programacion
       AWK.  Esta conforme con la definicion del lenguaje en el  POSIX  1003.2
       Command  Language  And Utilities Standard.  Esta version esta basada, a
       su vez, en la descripcion de The AWK Programming Language, escrito  por
       Aho,  Kernighan,  y Weinberger, con las caracteristicas adicionales que
       aparecen en la version del System  V  de  UNIX  awk.   Gawk  igualmente
       provee  de  las  recientes  extensiones del awk de Bell Labs, y algunas
       extensiones especificas de GNU.

       La linea 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   caracteristicas   especificas   de   GNU   como  para  las
       caracteristicas definidas por POSIX.

       Siguiendo el estandar  POSIX,  las  opciones  especificas  de  gawk  se
       proveen  via  argumentos  con la opcion -W .  Pueden anadirse multiples
       opciones -W .  Cada una de las opciones -W  tienen  su  correspondiente
       opcion larga, tal y como de detalla mas adelante. Los argumentos de las
       opciones largas deben estar unidas a la opcion mediante un  signo  =  ,
       sin espacios en blanco, o pueden proveerse en el siguiente argumento de
       la linea de orden.  Las opciones largas pueden ser abreviadas,  siempre
       y cuando la abreviatura sea unica.

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
              ejecucion  del  programa  comience.   Estos  valores de variable
              estan 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 linea de orden.
              Pueden usarse multiples opciones -f (o --file).

       -mf NNN
       -mr NNN
              Definir varios limites de memoria al valor NNN.  El indicador  f
              define  el  maximo  numero de campos, y el indicador r define el
              tamano maximo de un registro. Estos dos indicadores y la  opcion
              -m  son  de  la  version  de  awk  para  UNIX  de  la version de
              investigacion de Bell Labs.  Son ignoradas por gawk, ya que gawk
              no tiene limites predefinidos.

       -W traditional
       -W compat
       --traditional
       --compat
              Ejecutar  en  el  modo  de  compatibilidad  .   En  este modo de
              funcionamiento, gawk funciona de manera identica al awk de  UNIX
              ; ninguna de las extensiones especificas de GNU son reconocidas.
              Es preferible el uso de la forma --traditional  en  vez  de  las
              otras  formas  de  esta  opcion.   Vea  EXTENSIONES  DE GNU, mas
              adelante, para mas informacion.

       -W copyleft
       -W copyright
       --copyleft
       --copyright
              Imprime una version  corta  del  mensaje  de  informacion  sobre
              derechos  de  copia  de  GNU en la salida estandar, y termina de
              forma correcta.

       -W help
       -W usage
       --help
       --usage
              Imprime  un  resumen  relativamente  corto   de   las   opciones
              disponibles  por  la salida estandar.  (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 version original de Unix.  awk.

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

              o \x las secuencias de escape no son reconocidas.

              o Solo los espacios y los tabuladores actuan como separadores de
                campo  cuando FS contiene un unico espacio, y no los saltos de
                linea.

              o El  sinonimo  func  para  la  palabra  clave  function  no  es
                reconocido.

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

              o La funcion fflush() no esta disponible.

       -W re-interval
       --re-interval
              Activa  el  uso de las expresiones de intervalos en el ajuste de
              expresiones regulares (vea Expresiones Regulares, mas adelante).
              Las    expresiones    de    intervalos    no   eran   soportadas
              tradicionalmente por el lenguaje  AWK.  El  estandar  POSIX  las
              anadio,  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  opcion,  o  si  se  ha
              especificado --posix .

       -W source texto-del-programa
       --source texto-del-programa
              Usar  program-text como el codigo fuente del programa AWK.  Esta
              opcion permite la facil mezcla de funciones de libreria  (usadas
              mediante  las  opciones  -f y --file ) con codigo fuente entrado
              por la linea de orden.  Se ha propuesto primordialmente como  un
              medio para agrandar programas AWK usados en scripts de shell.

       -W version
       --version
              Imprime  informacion  sobre  la version de esta copia de gawk en
              particular por la salida estandar.  Es util principalmente  para
              saber  si  la  copia  actual  de  gawk en su sistema esta al dia
              respecto con cualquier cosa que la Free Software Foundation este
              distribuyendo.   Tambien  es  util para dar avisos sobre fallos.
              (Siguiendo los GNU Coding Standards, estas opciones  causan  una
              salida satisfactoria inmediata.)

       --     Senala  el  final de las opciones. Es util para permitir que los
              futuros  argumentos  al  propio  programa  AWK  puedan  comenzar
              tambien  por un  ``-''.  Esto es principalmente para mantener la
              consistencia con las  convenciones  de  analisis  de  argumentos
              usados por la mayoria de los restantes programas POSIX.

       En  el  modo  compatibilidad,  cualquier  otra opcion sera marcada como
       ilegal, aunque sean ignoradas.  En operacion 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  util para ejecutar programas AWK mediante el mecanismo
       de interprete de ejecutables ''#!''.

EJECUCI'ON DE UN PROGRAMA AWK

       Un programa AWK consiste en una secuencia de  sentencias  tipo  patron-
       accion y definiciones de funcion opcionales.

              patr'on    { sentencias de acci'on }
              function nombre(lista de par'ametros) { 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 opcion de la
       linea de orden.  Las opciones -f y --source pueden ser  usadas  mas  de
       una  vez  en una linea de orden.  Gawk leera el texto del programa como
       si todos los fichero(s)-de-programa y textos fuentes  de  la  linea  de
       orden   hubieran  sido  concatenados.   Esto  es  util  para  construir
       librerias de funciones AWK, sin tener la  necesidad  de  incluirlos  en
       cada  uno  de  los  nuevos  programas AWK que las use. Ademas ofrece la
       capacidad de mezclar funciones de libreria con programas de la linea de
       orden.

       La  variable  de  entorno AWKPATH especifica un camino de busqueda para
       ser usado cuando se busque los ficheros indicados con la  opcion  -f  .
       Si   esta   variable   no   existiera,  el  camino  por  defecto  seria
       ".:/usr/local/share/awk".   (El   directorio   actual   puede   variar,
       dependiendo  de desde donde se compilo e instalo gawk .)  Si un fichero
       dado a la opcion -f contiene un caracter ''/'', no  se  realiza  ningun
       tipo de busqueda.

       Gawk  ejecuta  los programas AWK en el siguiente orden.  Primero, todas
       las asignaciones de variables especificadas mediante la  opcion  -v  se
       realizan.   A  continuacion,  gawk  compila  el  programa en un formato
       interno.  Despues, gawk ejecuta el codigo del/los bloque(s)  BEGIN  (si
       existe  alguno),  y  a  continuacion  procede  a  leer  cada uno de los
       ficheros nombrados en la tabla ARGV .  Si no existe  ningun  nombre  de
       fichero en la linea de orden, gawk lee de la entrada estandar.

       Si  el nombre de un fichero en la linea de orden tiene la forma var=val
       sera tratado como una asignacion de variable. Se asignara a la variable
       var  el  valor  val.   (Esto  ocurre despues de que cualquier bloque(s)
       BEGIN haya sido ejecutado.)  Las asignaciones en la linea de  orden  es
       util  sobre todo para asignar valores de forma dinamica a las variables
       que AWK usa para controlar como es troceada  la  entrada  en  campos  y
       registros.  Es  tambien util para controlar el estado si son necesarios
       multiples pasos sobre el mismo fichero de datos.

       Si el valor de alguno de los elementos particulares de ARGV esta  vacio
       (""), 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 patron con el
       cual  el  registro  concuerde,  se  ejecuta  la  acci'on  asociada.  Los
       patrones son probados en el orden en que aparecen en el programa.

       Finalmente, despues de que  toda  la  entrada  se  ha  terminado,  gawk
       ejecuta el codigo en el/los bloque(s) END (si existiera alguno).

VARIABLES, REGISTROS Y CAMPOS

       Las  variables  AWK  son  dinamicas;  su existencia comienza cuando son
       usadas por primera vez. Sus valores son  numeros  de  coma  flotante  o
       cadenas  de  caracteres,  o  ambos, dependiendo de como son usadas. AWK
       tambien   dispone    de    tablas    unidimensionales;    las    tablas
       multidimensionales  pueden ser simuladas. Varias variables predefinidas
       se definen cuando un programa comienza a  ejecutarse;  seran  descritas
       cuando convenga y seran resumidas mas adelante.

   Registros
       Normalmente, los registros se separan por caracteres de salto de linea.
       Puede controlar como son separados los registros asignando valores a la
       variable  predefinida  RS.  Si RS tiene un unico caracter, ese caracter
       separara los registros.  De otro  modo,  RS  se  considerara  como  una
       expresion  regular.  El  texto  de  la  entrada  que  concuerde con esa
       expresion regular  sera  el  que  separara  los  registros.   De  todas
       maneras,  en  el  modo  compatibilidad,  solo el primer caracter de esa
       cadena sera usado para separar registros.  Si  RS  contiene  la  cadena
       vacia,  entonces  los registros seran separados por espacios en blanco.
       Cuando RS contiene la cadena vacia,  el  caracter  de  salto  de  linea
       siempre  actua  como separador de campos, anadiendose a cualquier valor
       que FS pudiera tener.

   Campos
       Conforme cada registro de entrada es leido, gawk divide el registro  en
       campos, usando el valor de la variable FS como separados de campos.  Si
       FS tiene  un  unico  caracter,  los  campos  seran  separados  por  ese
       caracter.   Si  FS  contiene  la  cadena  vacia, entonces cada caracter
       individual se convierte en separador de campo.  De otro modo, se espera
       que  FS sea una expresion regular completa.  En el caso especial de que
       FS tuviera un unico espacio en blanco, los campos serian separados  por
       tiras  de  espacios  y/o  tabuladores  y/o  saltos  de  linea.  (Vea la
       discusion sobre  --posix,  mas  adelante).   Notese  que  el  valor  de
       IGNORECASE (vea mas adelante) afectara tambien a como son divididos los
       registros en el caso de que FS fuera una expresion regular,  y  a  como
       son separados cuando RS fuera una expresion regular.

       Si  la  variable  FIELDWIDTHS  esta  definida  como una lista de numero
       separados por espacios, se espera que cada campo tenga  ancho  fijo,  y
       gawk dividiria el registro usando los anchos especificados. El valor de
       FS es ignorado es este  caso.   Asignar  un  nuevo  valor  a  FS  haria
       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
       posicion,  $1,  $2,  etc.   $0  es el registro completo. El valor de un
       campo  puede  ser  tambien  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 numero total de campos en el registro de entrada.

       Las referencias a campos que no existen (por  ejemplo  los  campos  por
       detras  de  $NF)  producen  la  cadena  vacia.  De  todas  maneras,  la
       asignacion de  un  campo  no  existente  (por  ejemplo,  $(NF+2)  =  5)
       incrementaria  el  valor de NF, creando los campos que intervienen como
       cadenas vacias, y causando que el valor de $0 fuera recalculado, siendo
       separados  los  campos  mediante  el  valor  de OFS.  Las referencias a
       campos con numeracion negativa causan un error fatal.   Decrementar  NF
       causa  que el valor de los campos que pasen del nuevo numero 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  numero  de  argumentos en la linea de orden (no incluye
                   las opciones para gawk, o el fuente del programa).

       ARGIND      El indice en ARGV  del  fichero  que  actualmente  se  esta
                   procesando.

       ARGV        Tabla  con  los  argumentos  de la linea de orden. La tabla
                   esta indexada  desde  el  0  hasta  ARGC  -  1.   Cambiando
                   dinamicamente  el  contenido  de ARGV permite controlar los
                   ficheros usados para datos.

       CONVFMT     El formato de conversion para numeros,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"]  podria  ser /home/arnold).
                   Cambiar esta tabla no afecta al entorno  de  los  programas
                   que  gawk  ejecuta  via redireccion o la funcion system() .
                   (Esto podria cambiar en una futura version de gawk.)

       ERRNO       Si ocurre algun  error  de  sistema  tanto  por  hacer  una
                   redireccion con getline, durante una lectura con getline, o
                   durante un close(), entonces ERRNO contendra una cadena  de
                   caracteres describiendo el error.

       FIELDWIDTHS Una lista de anchos de campo separados por espacios. Cuando
                   este definida, gawk  analiza  la  entrada  como  campos  de
                   tamano  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  todavia  experimental;  las
                   semanticas  podrian   cambiar   conforme   gawk   se   vaya
                   desarrollando en el tiempo.

       FILENAME    El  nombre  del  fichero  de  entrada  actual.  Si no se ha
                   especificado ningun fichero en la linea de orden, el  valor
                   de  FILENAME  sera ``-''.  De todos modos, FILENAME no esta
                   definida dentro de un bloque BEGIN .

       FNR         El numero de registro de entrada en el fichero  de  entrada
                   actual.

       FS          El  separador  de campo de entrada, un espacio por defecto.
                   Vea Fields, mas arriba.

       IGNORECASE  Controla  la  sensibilidad  a  mayusculas  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 division de campos  con  FS,  la
                   separacion   de   registros  con  RS,  la  comprobacion  de
                   expresiones  regulares  con  ~  y  !~,  y   las   funciones
                   predefinidas gensub(), gsub(), index(), match(), split(), y
                   sub() ignoraran la diferencia entre minusculas y mayusculas
                   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  mayusculas.   Bajo Unix, el conjunto de caracteres ISO
                   8859-1 Latin-1 es usado cuando se ignoran  las  mayusculas.
                   NOTA:  En versiones de gawk anteriores a la 3.0, IGNORECASE
                   solo afectaba a las operaciones con expresiones  regulares.
                   Ahora tambien afecta a las comparaciones de cadenas.

       NF          El numero de campos en el registro de entrada actual.

       NR          El  numero  total de registros de entrada que han aparecido
                   desde el principio.

       OFMT        El formato de salida  para  los  numeros,  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 linea.

       RS          El separador de registros de entrada, por defecto un  salto
                   de linea.

       RT          El  terminador  de  los  registros.   Gawk define RT con el
                   texto de entrada que concordo con el caracter  o  expresion
                   regular especificada por RS.

       RSTART      El  indice del primer caracter concordado por match(); 0 si
                   no concordo ninguno.

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

       SUBSEP      El  caracter  usado  para  separar  multiples subindices en
                   elementos de tipo tabla, por defecto "\034".

   Tablas
       Las tablas se indexan mediante una expresion entre corchetes ([  y  ]).
       Si  la expresion es una lista de expresiones (expr, expr ...)  entonces
       el indice de la tabla es una  cadena  de  caracteres  resultado  de  la
       concatenacion  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 multiples 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 esta
       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 ordenes if o while para
       comprobar si una tabla contiene  un  indice  consistente  en  un  valor
       particular.

              if (val in tabla)
                   print tabla[val]

       Si la tabla tiene multiples subindices, use (i, j) in tabla.

       La  construccion  in  tambien  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  tambien para borrar completamente los
       contenidos de una tabla, simplemente  especificando  el  nombre  de  la
       tabla sin ningun indice.

   Tipado de Variables y Conversiones
       Las  variables  y  los  campos pueden ser numeros (de coma flotante), o
       cadenas de caracteres,  o  ambos.  Dependera  del  contexto  como  sera
       interpretado  el  valor  de  una  variable.  Si se usa en una expresion
       numerica, sera tratado como numero, si se  usa  como  una  cadena  sera
       tratada como una cadena.

       Para  forzar  que una variable sea tratada como un numero, sumele un 0;
       para forzar que sea tratada como una cadena, concatenela con la  cadena
       vacia.

       Cuando  una  cadena  debe  ser  convertida  a  numero, la conversion se
       realiza usando atof(3).  Un numero es convertido en  cadena  usando  el
       valor  de  CONVFMT como cadena de formato para sprintf(3), con el valor
       numerico de la variable como el argumento.  De  todas  maneras,  aunque
       todos  los  numeros  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 contendra el valor de tipo cadena "12" y no "12.00".

       Gawk realiza comparaciones tal y  como  sigue:  Si  dos  variables  son
       numericas,  son comparadas numericamente.  Si un valor es numerico y el
       otro tiene un valor de tipo  cadena  que  es  un  ``cadena  numerica'',
       entonces  las  comparaciones  se  hacen numericamente. En otro caso, el
       valor numerico 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 estandar POSIX, si dos cadenas fueran cadenas numericas  deberia
       realizarse   una  comparacion  numerica.  De  todas  maneras,  esto  es
       claramente incorrecto, y gawk no lo hace asi.

       Notese que las constantes de tipo cadena, como  "57",  no  son  cadenas
       numericas,  sino  constantes  de cadena. La idea de ``cadena numerica''
       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 numericas.  La idea  basica  es
       que  las  entradas  de  usuario,  y  solo  las entradas de usuario, que
       parezcan numericas, seran tratadas de esta manera.

       Las variables sin inicializar tendran el valor numerico 0 y  la  cadena
       "" (cadena nula o vacia).

PATRONES Y ACCIONES

       AWK es un lenguaje orientado a la linea. Primero se indica el patron, y
       luego la accion. Las sentencias de las acciones se engloban mediante  {
       y  }.   Puede no indicarse el patron o la accion, pero por supuesto, no
       ambos.  Si no se especifica el patron, la  accion  sera  ejecutada  por
       cada  uno  de  los  registros  individuales  de  la  entrada.  Si no se
       especifica la accion es equivalente a escribir la accion

              { print }

       la cual imprime el registro completo.

       Los comentarios comienzan con el caracter ``#'', y continuan  hasta  el
       final  de  la  linea.   Pueden  usarse  lineas  en  blanco para separar
       sentencias.  Normalmente, una sentencia termina con un salto de  linea,
       aunque  este no es el caso de las lineas que finalizan con un ``,'', {,
       ?, :, &&, o ||.  Las lineas que terminan  con  do  o  else  tambien  se
       considera  que  continuan  en  la  siguiente linea. En otros casos, una
       linea podra ser continuada en la siguiente poniendo al final un  ``\'',
       en cuyo caso se ignorara el salto de linea.

       Se  pueden  poner  multiples  sentencias en la misma linea separandolos
       mediante un ``;''.  Esto  se  aplica  tanto  para  las  sentencias  que
       componen  la  parte  de  la accion de un par patron-accion (el caso mas
       usual), como para las propias sentencias patron-accion.

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

              BEGIN
              END
              /expresi'on regular/
              expresi'on relacional
              patr'on && patr'on
              patr'on || patr'on
              patr'on ? patr'on : patr'on
              (patr'on)
              ! patr'on
              patr'on1, patr'on2

       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 unico bloque BEGIN .  Son ejecutadas antes de que se lea
       algo de la entrada. De forma analoga, 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 patron.  Los patrones
       BEGIN y END no pueden tener vacia la parte de la accion.

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

       Una  expresi'on  relacional  puede  usar  cualquiera  de  los operadores
       definidos en la parte de acciones de esta seccion.  Estas  generalmente
       comprueban  si  ciertos  campos  concuerdan  con  una  cierta expresion
       regular.

       Los operadores &&, ||, y !  son  respectivamente  la  Y  logica,  la  O
       logica,  y  la  NO  logica,  como en C.  Hacen evaluaciones de circuito
       corto, tambien como en C, y se usan para combinar varias expresiones de
       patron  primitivas.  Como en la mayoria de los lenguajes, pueden usarse
       parentesis para cambiar el orden de la evaluacion.

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

       La  forma patr'on1, patr'on2 para una expresion recibe el nombre de rango
       de patrones.  Concuerda con todos  los  registros  de  la  entrada  que
       existan  entre el registro que concuerde con patr'on1, y el registro que
       concuerde con patr'on2, inclusive. No combina con ningun  otro  tipo  de
       expresion de patron.

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

       c          concuerda con el caracter c(nometacar'acter).

       \c         concuerda con el caracter literal c.

       .          concuerda con cualquier  caracter  incluyendo  el  salto  de
                  linea.

       ^          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 caracter
                  excepto abc....

       r1|r2      alternativa: concuerda con r1 o r2.

       r1r2       concatenacion: concuerda con r1, y despues con r2.

       r+         concuerda con una o mas apariciones de r.

       r*         concuerda con cero o mas apariciones de r.

       r?         concuerda con cero o una aparicion de r.

       (r)        agrupacion: concuerda con r.

       r{n}
       r{n,}
       r{n,m}     Uno  o  dos  numeros  entre  llaves denotan una expresi'on de
                  intervalo.  Si  hay  un  numero  entre  llaves,  la  expreg.
                  precedente r se repite n veces. Si hay dos numeros separados
                  por una coma, r se repite de n a m veces.  Si hay un  numero
                  seguido  de  una  coma,  entonces  r se repite como minimo n
                  veces.
                  Las expresiones de intervalo solo estan  disponibles  si  se
                  especifica --posix o --re-interval en la linea de orden.

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

       \B         concuerda con la cadena vacia dentro de una palabra.

       \<         concuerda con la cadena vacia al principio de una palabra.

       \>         concuerda con la cadena vacia al final de una palabra.

       \w         concuerda con cualquier  caracter  constitutivo  de  palabra
                  (letra, digito, o subrayado.)

       \W         concuerda  con  cualquier caracter que no es constitutivo de
                  palabra.

       \`         concuerda con la cadena  vacia  al  principio  de  un  bufer
                  (cadena).

       \'         concuerda con la cadena vacia al final de un bufer.

       Las  secuencias  de  escape que son validas en las constantes de cadena
       (vea abajo) son tambien legales en las expresiones regulares.

       Las clases de caracteres son una nueva caracteristica introducida en el
       estandar  POSIX.  Una clase de caracteres es una notacion especial para
       describir listas de caracteres que tienen un atributo especifico,  pero
       donde los caracteres en si mismos pueden variar entre paises diferentes
       y/o entre juegos de caracteres diferentes. Por ejemplo, la nocion de lo
       que es un caracter alfanumerico difiere entre los EEUU y Francia.

       Una  clase  de  caracteres  solo  es valida 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 estandar POSIX.

       [:alnum:]
              Caracteres alfanumericos.

       [:alpha:]
              Caracteres alfabeticos.

       [:blank:]
              Espacio en blanco o tabulador.

       [:cntrl:]
              Caracteres de control.

       [:digit:]
              Caracteres numericos.

       [: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 alfabeticos en minuscula.

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

       [:punct:]
              Caracteres  de  puntuacion (aquellos que no son letras, digitos,
              caracteres de control, o caracteres de espaciado.)

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

       [:upper:]
              Caracteres alfabeticos en mayuscula.

       [:xdigit:]
              Caracteres que son digitos hexadecimales.

       Por  ejemplo,  antes  del  estandar  POSIX,  para  concordar caracteres
       alfanumericos, tendria que haber escrito /[A-Za-z0-9]/.  Si su juego de
       caracteres  contiene  otros caracteres alfabeticos, esta especificacion
       no los hubiera recogido. Usando las  clases  de  caracteres  de  POSIX,
       puede   escribir  /[[:alnum:]]/,  y  esto  concordaria  con  todos  los
       caracteres alfabeticos y numericos 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  simbolos   (llamados   elementos
       equivalentes)  los  cuales son representados por mas de un caracter, al
       igual que varios caracteres que son  equivalentes  para  propositos  de
       comparaci'on u ordenaci'on.  (Por ejemplo, en Espanol, una ``e'' normal y
       una con tilde "a" son equivalentes.)

       Simbolos Equivalentes
              Un simbolo equivalente es un elemento  formado  por  mas  de  un
              caracter  englobado  entre  [.   y .].  Por ejemplo, si ch es un
              elemento  equivalente,  entonces  [[.ch.]]   es  una   expresion
              regular  que  se  ajusta con este elemento equivalente, mientras
              que [ch] es una expresion regular que se ajusta con una c o  con
              una h.

       Clases de Equivalencia
              Una  clase  de  quivalencia  es  un  nombre (especifico para una
              localizacion 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,''  ``e,''  y  ``e.''  En este caso, [[=e]] es una expresion
              regular que se ajusta con
               .BR e ,
               .BR e , o
               .BR e .

       Estas caracteristicas son especialmente utiles para las  localizaciones
       de  habla  no  inglesa.  Las funciones de libreria que usa gawk para el
       ajuste de expresiones regulares solo reconoce las clases de  caracteres
       POSIX;  no  reconocen  ni  los  simbolos  equivalentes ni las clases de
       equivalencia.

       Los operadores \y, \B, \<, \>, \w, \W, \`, y \'  son  especificos  para
       gawk;  son  extensiones  basadas en las capacidades de las librerias de
       expresiones regulares de GNU.

       Varias opciones de la linea de ordenes controlan como  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 estan
              permitidas.

       --traditional
              Se  aceptan  las  expresiones  regulares  de  la  implementacion
              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
       asignacion, condicionales y bucles que pueden encontrarse en la mayoria
       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

       (...)       Agrupacion.

       $           Referencia a campo.

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

       ^           Exponenciacion (tambien puede usarse ** ,  y  **=  para  el
                   operador de asignacion.)

       + - !       Mas y menos unarios, y negacion logica.

       * / %       Multiplicacion, division, y resto de division.

       + -         Suma y resta.

       space       Concatenacion de cadenas.

       < >
       <= >=
       != ==       Operadores de relacion tradicionales.

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

       in          Pertenencia a una tabla.

       &&          Y logica.

       ||          O logica.

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

       = += -=
       *= /= %= ^= Asignacion.  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'on) sentencia [ else sentencia ]
              while (condici'on) sentencia
              do sentencia while (condici'on)
              for (expr1; expr2; expr3) sentencia
              for (var in tabla) sentencia
              break
              continue
              delete tabla['indice]
              delete tabla
              exit [ expresi'on ]
              { sentencias }

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

       close(fichero)         Cerrar fichero (o tuberia, vea mas 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
                              patron 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 patron 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 todavia, genera un mensaje de
                              alerta y sera 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 expresion  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 expresion
                              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'inea-de-orden) Ejecutar la orden l'inea-de-orden, y devuelve  el
                              valor   de   salida.    (Esto   puede  no  estar
                              disponible en sistemas no POSIX .)

       fflush([fichero])      Descargar  cualquier  bufer  asociado   con   el
                              fichero  o  tuberia de salida abierto.  Si no se
                              especifica fichero ,  entonces  se  descarga  la
                              salida estandar.  Si fichero es la cadena vacia,
                              entonces todos los  bufers  de  los  ficheros  y
                              tuberias de salida abiertos son descargados.

       Tambien  se  permiten  redirecciones  de  entrada/salida.  Para print y
       printf, >>fichero anade la salida  a  fichero,  mientras  que  |  orden
       escribe  en  una  tuberia.   De  forma similar, orden | getline escribe
       mediante una tuberia en getline.  La orden getline retornara  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 funcion sprintf()
       (vease  a  continuacion)  aceptan  la  siguiente  especificacion   para
       formatos de conversion:

       %c     Un  caracter ASCII .  Si el argumento usado para %c es numerico,
              es tratado como un  caracter  e  imprimido.  De  otro  modo,  el
              argumento  se  asume  que  es  una  cadena, y solo se imprime el
              primer caracter de esa cadena.

       %d
       %i     Un numero decimal (la parte entera).

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

       %f     Un numero real de coma flotante de la forma [-]ddd.dddddd.

       %g
       %G     Usese  la conversion %e o %f , la que sea mas corta, suprimiendo
              los ceros no significativos.  El formato %G usa %E en vez de %e.

       %o     Un numero sin signo en octal (entero.)

       %s     Una cadena de caracteres.

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

       %%     Un caracter % ; no se utiliza ningun argumento.

       Estos  son  parametros  opcionales  que  pueden ponerse entre el % y la
       letra de control:

       -      La expresion debe ser justificada por la izquierda dentro de  su
              campo.

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

       +      EL  signo  mas,  usado antes del modificador de anchura (vea mas
              adelante), indica que siempre  debe  ponerse  el  signo  en  las
              conversiones  numericas,  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, anade un cero inicial.  Para %x, y %X, anade un 0x o 0X
              inicial para resultados diferentes de cero.  Para %e, %E, y  %f,
              El resultado contendra siempre un punto decimal.  Para %g, y %G,
              Los ceros al final no seran eliminados del resultado.

       0      Un 0 (cero) inicial actua como una bandera, indica que la salida
              debe  ser  rellenada  con  ceros en vez de con espacios. Esto se
              aplica tambien para los formatos de salida  no  numericos.  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 sera rellenado con espacios. Si
              la bandera 0 se esta usando, sera rellenado con ceros.

       .prec  Un numero que especifica la precision a usar cuando se  imprima.
              Para  los  formatos  %e, %E, y %f , esto especifica el numero de
              digitos que desea  que  se  impriman  a  la  derecha  del  punto
              decimal.   Para  los  formatos  %g,  y %G , especifica el numero
              maximo de digitos significativos. Para los formatos %d, %o,  %i,
              %u,  %x,  y  %X  ,  especifica  el  numero  minimo  de digitos a
              imprimir. Para  una  cadena,  especifica  el  numero  maximo  de
              caracteres de la cadena que deben ser imprimidos.

       Las caracteristicas de anchura y prec dinamicas de las rutinas printf()
       del  ANSI  C  tambien  son  soportadas.   Un  *  en  el  lugar  de  las
       especificaciones  de  anchura  o  de  prec causara que sus valores sean
       tomados a partir de la lista de argumentos de printf o sprintf().

   Nombres especiales de ficheros
       Cuando se realiza redireccion 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  informacion  sobre  la
       ejecucion 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 linea.

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

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

       /dev/user   Leer de este fichero devuelve un registro terminado con  un
                   salto  de  linea.  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 multiples
                   grupos.

       /dev/stdin  La entrada estandar.

       /dev/stdout La salida estandar.

       /dev/stderr La salida de error estandar.

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

       Son particularmente utiles para los mensajes de error. Por ejemplo:

              print ",i Error !" > "/dev/stderr"

       donde, de otra manera, tendria que haber usado

              print ",i Error !" | "cat 1>&2"

       Estos nombres de fichero pueden usarse tambien en  la  linea  de  orden
       para nombrar ficheros de datos.

   Funciones num'ericas
       AWK dispone de las siguientes funciones aritmeticas predefinidas:

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

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

       exp(expr)     la funcion exponencial.

       int(expr)     truncado a entero.

       log(expr)     logaritmo natural.

       rand()        devuelve un numero aleatorio entre 0 y 1.

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

       sqrt(expr)    raiz cuadrada.

       srand([expr]) usa  expr  como  la  nueva  semilla  para el generador de
                     numeros aleatorios. Si no se indica expr , se usa la hora
                     del  dia.  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 expresion 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 numero 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 digito de
                               1 a 9, para indicar solo el  texto  que  se  ha
                               ajustado  con  la  subexpresion  con parentesis
                               n'esima.  La secuencia \0 representa  el  texto
                               ajustado  completo, al igual que el caracter &.
                               A diferencia  de  sub()  y  gsub(),  la  cadena
                               modificada  se  devuelve  como  resultado de la
                               funcion, y la cadena objetivo  original  no  es
                               modificada.

       gsub(r, s [, t])        para cada subcadena que ajuste con la expresion
                               regular r en la cadena t, substituye la  cadena
                               s,  y  devuelve el numero 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 descripcion mas  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 indice 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  posicion  en  s  donde aparece la
                               expresion 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
                               expresion regular r, y devuelve  el  numero  de
                               campos. Si se omite r , se usa FS .  La tabla a
                               se borra al principio. La division funciona  de
                               forma   identica   a  la  division  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  mayuscula de cad cambiados
                               por  sus  correspondientes  en  minuscula.  Los
                               caracteres no alfabeticos no son modificados.

       toupper(cad)            devuelve  una copia de la cadena cad, con todos
                               los caracteres en minuscula  de  cad  cambiados
                               por  sus  correspondientes  en  mayuscula.  Los
                               caracteres no alfabeticos 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
       informacion de registro de  tiempo,  gawk  proporciona  las  siguientes
       funciones para obtener registros de tiempo y darles formato.

       systime() devuelve  la  hora  del dia actual como el numero de segundos
                 desde la Epoca  (Medianoche  UTC  del  1  Enero  de  1970  en
                 sistemas POSIX).

       strftime([formato [, timestamp]])
                 da  formato  a  timestamp de acuerdo con la especificacion en
                 formato.  El timestamp debe  tener  la  misma  forma  que  el
                 retornado  por  systime().   Si  no  aparece  timestamp  , se
                 utiliza la hora del dia actual.  Si no aparece formato  ,  se
                 utiliza  un  formato  por  defecto equivalente a la salida de
                 date(1).  Vea la especificacion de la funcion  strftime()  en
                 ANSI  C  para estar seguro de las conversiones de formato que
                 se garantiza que existen.  Una version de dominio publico  de
                 strftime(3)   y   la  correspondiente  pagina  de  manual  se
                 distribuyen con gawk; si se uso  esa  version  para  compilar
                 gawk, entonces todas las conversiones descritas en esa pagina
                 de manual estaran 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 caracter de ``alerta''; usualmente el caracter ASCII BEL .

       \b   caracter de borrado.

       \f   salto de pagina.

       \n   salto de linea.

       \r   retorno de carro.

       \t   tabulador horizontal.

       \v   tabulador vertical

       \xd'igitos hexadecimales
            El caracter representado por la cadena  de  digitos  hexadecimales
            que   sigue   a  la  \x.   Como  en  ANSI  C,  todos  los  digitos
            hexadecimales siguientes se consideran como parte de la  secuencia
            de escape.  (Esta caracteristica nos deberia dar una idea sobre el
            diseno de lenguajes  del  comite.)   Por  ejemplo,  "\x1B"  es  el
            caracter ASCII ESC (escape).

       \ddd El  caracter  representado por la secuencia de 1, 2 o 3 digitos en
            octal. Por ejemplo . "\033" es el caracter ASCII ESC (escape).

       \c   El caracter c literal.

       Las secuencias de escape pueden usarse tambien 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.  Asi,  /a\52b/
       es equivalente a /a\*b/.

FUNCIONES

       La funciones en AWK se definen de la siguiente manera:

              function nombre(lista de par'ametros) { sentencias }

       Las  funciones  se  ejecutan  cuando  son  llamadas desde dentro de las
       expresiones tanto desde patrones  o  acciones.  Los  parametros  reales
       usados  en  la  llamada  a  la  funcion  se  usan  para  instanciar los
       parametros formales declarados en la funcion. 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
       parametros  extra  en  la lista de parametros. Por costumbre se separan
       las variables locales de los parametros reales por espacios  en  blanco
       adicionales en la lista de parametros. Por ejemplo:

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

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

       Es  necesario que el parentesis izquierdo en una llamada a funcion siga
       inmediatamente al nombre de la funcion, sin anadir  ningun  espacio  en
       blanco.  Esto  es necesario para evitar ambiguedades sintacticas con el
       operador  de  concatenacion.  Esta  restriccion  no  se  aplica  a  las
       funciones predefinidas listadas anteriormente.

       Las  funciones  pueden  llamarse  las  unas  a  las  otras y pueden ser
       recursivas.  Los  parametros  usados   como   variables   locales   son
       inicializados con una cadena vacia y el numero cero en la invocacion de
       la funcion.

       Si se indico --lint , gawk generara mensajes de alarma sobre llamadas a
       funciones  no  definidas  en tiempo de analisis, en vez de en tiempo de
       ejecucion.  Llamar a una funcion no definida en tiempo de ejecucion  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 lineas de un fichero:

                 { nlines++ }
            END  { print nlines }

       Anadir el numero de linea al principio de cada una en el fichero:

            { print FNR, $0 }

       Concatenar y numero de linea (una variacion del ejercicio):

            { print NR, $0 }

V'EASE TAMBI'EN

       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  estandar
       POSIX,  y  a  su vez la compatibilidad con la ultima version 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 version de Bell Labs de awk, y se encuentran en el estandar
       POSIX .

       La  opcion -v para asignar variables antes de la ejecucion del programa
       es nueva.  El libro dice que las asignaciones de variables de la  linea
       de  ordenes ocurririan cuando awk abriera el argumento como un fichero,
       lo cual es antes de ejecutar el bloque BEGIN  .   De  todos  modos,  en
       implementaciones  mas modernas, cuando una asignacion como esta aparece
       antes que ningun nombre de fichero, la asignacion  ocurriria  antes  de
       que  el  bloque  BEGIN fuera ejecutado.  Las aplicaciones acostumbran a
       depender de esta ``caracteristica.''  Cuando awk  fue  modificado  para
       acomodarse  a  su  documentacion, se anadio esta opcion para acomodar a
       las aplicaciones que dependen  de  esta  vieja  caracteristica.   (Esta
       caracteristica  fue aceptada tanto por los desarrolladores de AT&T como
       por los de GNU.)

       La  opcion  -W  para  implementacion  de  caracteristicas   especificas
       pertenece al estandar POSIX.

       Durante  el procesado de argumentos, gawk usa la opcion especial ``--''
       para senalar el final de los argumentos.  En modo  compatibilidad,  las
       opciones  no  definidas daran un mensaje de alerta, pero de todos modos
       son ignoradas.  En operacion 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 estandar
       POSIX hace que devuelva la semilla que  estaba  usando,  para  permitir
       seguir  la  pista  de  las  secuencias de numeros aleatorios.  Por este
       motivo, srand() en gawk devuelve igualmente la semilla actual.

       Otras caracteristicas nuevas son: El uso de multiples  opciones  -f  (a
       partir  de  MKS awk); la tabla ENVIRON ; las secuencias de escape \a, y
       \v (implementadas originalmente en gawk y anadidas  en  la  version  de
       AT&T);  las  funciones  predefinidas tolower() y toupper() (a partir de
       AT&T); y las  especificaciones  de  conversion  de  ANSI  C  en  printf
       (implementadas por primera vez en la version de AT&T).

EXTENSIONES DE GNU

       Gawk  contiene una serie de extensiones del awk de POSIX.  Se describen
       en  esta  seccion.  Las  extensiones  que  se  describen  aqui   pueden
       desactivarse llamando a gawk con la opcion --traditional .

       Las  siguientes  capacidades  de gawk no estan disponibles en el awk de
       POSIX.

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

              o La funcion fflush() .  (Desactivada con --posix.)

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

              o Los nombres de fichero especiales para redireccion de  E/S  no
                son reconocidos.

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

              o La variable IGNORECASE y sus efectos no estan disponibles.

              o La variable FIELDWIDTHS y la division de campos de ancho fijo.

              o El uso de RS como una expresion regular.

              o La  habilidad  de  dividir  caracteres  individuales usando la
                cadena vacia como valor para FS, y como tercer argumento  para
                split().

              o No  se  realiza busqueda de camino para los ficheros nombrados
                mediante la opcion -f .  Por  ello,  la  variable  de  entorno
                AWKPATH no es especial.

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

              o 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 funcion close() .
       El close() de gawk devuelve el valor de fclose(3), o pclose(3),  cuando
       se este cerrando un fichero o una tuberia, respectivamente.

       Cuando  se  invoca a gawk con la opcion --traditional , si el argumento
       fs para la opcion -F es ``t'', entonces se asignara a  FS  el  caracter
       tabulador.   Notese  que  escribiendo  gawk  -F\t  ...   simplemente se
       provoca que el shell lo cambie por el literal ``t'', y no pase ``\t'' a
       la  opcion  -F  .   Dado  que  es  un caso un tanto especial y bastante
       desagradable,  esta no es la manera por defecto de actuar.  Tampoco  se
       actua  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'ORICAS

       Hay  dos caracteristicas de implementaciones historicas de AWK que gawk
       soporta.  Primera, es posible llamar a la funcion predefinida  length()
       no solamente sin argumento, isino incluso sin parentesis!  Por eso,

              a = length

       es igual que las siguientes

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

       Esta  caracteristica se tilda de ``censurable'' en el estandar POSIX, y
       gawk generara un mensaje de alerta sobre su uso si se especifica --lint
       en la linea de orden.

       La  otra  caracteristica  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  soportara  este   uso   si   se   especifica
       --traditional en la linea de orden.

VARIABLES DE ENTORNO

       Si   POSIXLY_CORRECT   existe   en  el  entorno,  entonces  gawk  actua
       exactamente como si se hubiera especificado  --posix  en  la  linea  de
       orden.   Si  se hubiera especificado --lint , gawk generaria 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 opcion -F no es necesaria dada la caracteristica de las asignaciones
       de variables por la linea 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 podria obtener en un sistema sin
       estos ficheros. Cuando gawk  interpreta  estos  ficheros  internamente,
       sincroniza  la salida a la salida estandar con la salida a /dev/stdout,
       mientras que en un sistema con estos ficheros, la salida  realmente  se
       envia ficheros abiertos diferentes.

       Los programas de un solo caracter sintacticamente incorrectos tienden a
       sobrepasar la pila del  analizador  sintactico,  generando  un  mensaje
       bastante poco util. Sorprendentemente, estos programas son dificiles de
       diagnosticas en el caso general, y el esfuerzo para  hacerlo  realmente
       no merece la pena.

INFORMACI'ON DE LA VERSI'ON

       Esta pagina de manual documenta la version 3.0.2 de gawk.

AUTORES

       La  version  original  de awk para UNIX fue disenada e implementada por
       Alfred Aho, Peter Weinberger, y Brian  Kernighan  de  AT&T  Bell  Labs.
       Brian Kernighan continua con su mantenimiento y mejora.

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

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

INFORME DE FALLOS

       Si  encontrara  algun  fallo  en  gawk,  envie  por  favor  un  mensaje
       electronico  a bug-gnu-utils@prep.ai.mit.edu, con una copia de carbon a
       arnold@gnu.ai.mit.edu.  Por favor, incluya su sistema  operativo  y  su
       revision,  la version de gawk, que compilador de C uso para compilarlo,
       y el programa  de  prueba  y  los  datos  minimos  para  reproducir  el
       problema.

       Antes  de  enviar  un  informe  de  fallos,  haga  por favor dos cosas.
       Primero, verifique que dispone de la ultima version  de  gawk.   Muchos
       fallos  (normalmente  bastante  sutiles)  son  arreglados en cada nueva
       version, y si la suya  esta  obsoleta,  el  problema  podria  estar  ya
       arreglado.   Segundo,  por favor lea detenidamente tanto esta pagina 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
       interpretacion 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 electronico anteriores.

RECONOCIMIENTOS

       Brian Kernighan de Bell Labs proveyo de una valiosa asistencia  durante
       las pruebas y la eliminacion de fallos. Le damos las gracias.

PERMISOS DE COPIA

       Copyright (C) 1996 Free Software Foundation, Inc.

       Se  concede  permiso  para  hacer y distribuir copias literales de esta
       pagina 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 pagina de manual bajo las condiciones de la copia literal,  siendo
       los  resultados  completos  del  trabajo derivado distribuidos bajo los
       terminos de una nota de permisos identica a esta.

       Se concede permiso para copiar y distribuir traducciones de esta pagina
       de  manual  a  otros  idiomas,  bajo  las  anteriores  condiciones para
       versiones modificadas, exceptuando  que  esta  nota  de  permisos  debe
       manifestarse mediante una traduccion aprobada por la Fundacion.

       Nota  del  traductor:  Dado  que  la  traduccion  de  esta nota no esta
       aprobada por la Free Software Foundation, se anade la nota original  en
       Ingles.

COPYING PERMISSIONS

       Copyright (C) 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.