awk - manual de referencia, opciones, ejemplos de comandos


NOMBRE

awk gawk - lenguaje de escaneo y procesamiento de patrones

SINOPSIS

gawk [ POSIX or GNU style options ] -f program-file [ - - ] file . . .
gawk [ POSIX or GNU style options ] [ - - ] program-text file . . .

DESCRIPCIÓN

Gawk es la implementación del proyecto GNU del lenguaje de programación AWK. Cumple con la definición del lenguaje en el estándar POSIX 1003.1. Esta versión, a su vez, se basa en la descripción de El lenguaje de programación AWK, de Aho, Kernighan y Weinberger. Gawk proporciona las funciones adicionales que se encuentran en la versión actual de awk de Brian Kernighan y numerosas extensiones específicas de GNU.

La línea de comando consta de opciones para mirar boquiabierto, el texto del programa AWK (si no se proporciona a través de las opciones -f o - -include), y valores que estarán disponibles en las variables AWK predefinidas ARGC y ARGV.

PREFACIO

Esta página del manual es intencionalmente lo más concisa posible. Los detalles completos se proporcionan en GAWK: Programación eficaz de AWK, y debe buscar allí la historia completa sobre cualquier característica específica. Siempre que sea posible, se proporcionan enlaces a la versión en línea del manual.

OPCIÓN FORMATO

Las opciones de Gawk pueden ser opciones tradicionales de una letra al estilo POSIX u opciones largas al estilo GNU. Las opciones POSIX comienzan con un solo "-", mientras que las opciones largas comienzan con "- -". Se proporcionan opciones largas tanto para funciones específicas de GNU como para funciones exigidas por POSIX.

Las opciones específicas de Gawk se utilizan normalmente en forma de opción larga. Los argumentos de las opciones largas se unen a la opción mediante un signo =, sin espacios intermedios, o se pueden proporcionar en el siguiente argumento de la línea de comandos. Las opciones largas se pueden abreviar, siempre que la abreviatura siga siendo única.

Además, cada opción larga tiene una opción corta correspondiente, por lo que la funcionalidad de la opción se puede usar desde los scripts ejecutables #!.

OPCIONES

Gawk acepta las siguientes opciones. Las opciones estándar se enumeran primero, seguidas de las opciones para las extensiones gawk, enumeradas alfabéticamente por opción corta.

-f program-file,

- -file program-file Lea el código fuente del programa AWK desde el archivo program-file, en lugar de hacerlo desde el primer argumento de la línea de comandos. Se pueden utilizar varias opciones -f. Los archivos leídos con -f se tratan como si comenzaran con una declaración implícita @namespace "awk".

-F fs,

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

-v var = val, - -assign var = val

Asigne el valor val a la variable var, antes de que comience la ejecución del programa. Dichos valores de variables están disponibles para la regla BEGIN de un programa AWK.

-b,

- -caracteres-como-bytes Trata todos los datos de entrada como caracteres de un solo byte. La opción - -posix anula esta.

-c,

- -tradicional Ejecutar en modo compatibilidad. En el modo de compatibilidad, gawk se comporta de forma idéntica a awk de Brian Kernighan; no se reconoce ninguna de las extensiones específicas de GNU.

-C,

- -copyright Imprima la versión corta del mensaje de información de copyright de GNU en la salida estándar y salga correctamente.

-d[file], - -dump-variables[=file]

Imprima una lista ordenada de variables globales, sus tipos y valores finales en archivo. El archivo predeterminado es awkvars.out en el directorio actual.

-D[file], - -debug[=file]

Habilite la depuración de programas AWK. De forma predeterminada, el depurador lee los comandos de forma interactiva desde el teclado (entrada estándar). El argumento opcional archivo especifica un archivo con una lista de comandos para que el depurador los ejecute de forma no interactiva.

En este modo de ejecución, gawk carga el código fuente de AWK y luego solicita comandos de depuración. Gawk solo puede depurar la fuente del programa AWK proporcionada con las opciones -f y - -include. El depurador está documentado en GAWK: Programación efectiva de AWK; consulte https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger.

-e program-text,

- -source program-text Utilice program-text como código fuente del programa AWK. Cada argumento proporcionado a través de -e se trata como si comenzara con una declaración @namespace "awk" implícita.

-E file, - -exec file

Similar a -f, sin embargo, esta opción es la última procesada. Esto debe usarse con secuencias de comandos #!, particularmente para aplicaciones CGI, para evitar pasar opciones o código fuente (!) en la línea de comando desde una URL. Esta opción deshabilita las asignaciones de variables de la línea de comandos.

-g,

- -gen-pot Escanee y analice el programa AWK y genere un archivo de formato GNU .pot (plantilla de objeto portátil) en salida estándar con entradas para todas las cadenas localizables en el programa. El programa en sí no se ejecuta.

-h,

- -help Imprime un resumen relativamente breve de las opciones disponibles en la salida estándar. De acuerdo con los estándares de codificación GNU, estas opciones provocan una salida inmediata y exitosa.

-i include-file, - -include include-file

Cargue una biblioteca fuente awk. Esto busca la biblioteca utilizando la variable de entorno AWKPATH. Si la búsqueda inicial falla, se realizará otro intento después de agregar el sufijo .awk. El archivo se cargará solo una vez (es decir, se eliminan los duplicados) y el código no constituye la fuente principal del programa. Los archivos leídos con - -include se tratan como si comenzaran con una declaración implícita @namespace "awk".

-I,

- -trace Imprime los nombres de los códigos de bytes internos a medida que se ejecutan al ejecutar el programa. La traza se imprime con un error estándar. Cada ``código de operación'' está precedido por un signo + en la salida.

-l lib,

- -load lib Carga una extensión gawk desde la biblioteca compartida lib. Esto busca la biblioteca utilizando la variable de entorno AWKLIBPATH. Si la búsqueda inicial falla, se realizará otro intento después de agregar el sufijo de biblioteca compartida predeterminado para la plataforma. Se espera que la rutina de inicialización de la biblioteca se llame dl_load().

-L [value], - -lint[=value]

Proporcione advertencias sobre construcciones dudosas o no portátiles para otras implementaciones de AWK. Consulte https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options para ver la lista de valores posibles para value.

-M,

- -bignum Fuerza aritmética de precisión arbitraria en los números. Esta opción no tiene efecto si gawk no está compilado para usar las bibliotecas GNU MPFR y GMP. (En tal caso, gawk emite una advertencia).

NOTA: esta característica está en libertad condicional. El mantenedor principal de gawk ya no lo admite, aunque hay un miembro del equipo de desarrollo que sí lo hace. Si esta situación cambia, la función se eliminará de gawk.

Configure GAWK_NO_MPFR_WARN en el entorno para silenciar la advertencia.

-n,

- -no-decimal-data Reconoce valores octales y hexadecimales en datos de entrada. ¡Utilice esta opción con mucha precaución!

-N,

- -use-lc-numeric Obliga a gawk a utilizar el carácter de punto decimal de la configuración regional al analizar los datos de entrada.

-W nostalgia,

- -nostalgia Proporcione un momento de nostalgia para los usuarios awk de mucho tiempo.

-o[file], - -pretty-print[=file]

Envíe una bonita versión impresa del programa a archivo. El archivo predeterminado es awkprof.out en el directorio actual. Esta opción implica - -no-optimizar.

-O,

- -optimize Habilite las optimizaciones predeterminadas de gawk en la representación interna del programa. Esta opción está activada de forma predeterminada.

-p[prof-file], - -profile[=prof-file]

Inicie una sesión de generación de perfiles y envíe los datos de generación de perfiles a prof-file. El valor predeterminado es awkprof.out en el directorio actual. El perfil contiene recuentos de ejecución de cada declaración en el programa en el margen izquierdo y recuentos de llamadas de función para cada función definida por el usuario. Gawk funciona más lentamente en este modo. Esta opción implica - -no-optimizar.

-P,

- -posix Activa el modo de compatibilidad y desactiva varias extensiones comunes.

-r,

- -re-interval Habilite el uso de expresiones de intervalo en la coincidencia de expresiones regulares. Las expresiones de intervalo están habilitadas de forma predeterminada, pero esta opción se mantiene por compatibilidad con versiones anteriores.

-s,

- -no-optimize Desactiva las optimizaciones predeterminadas de gawk en la representación interna del programa.

-S,

- -sandbox Ejecute gawk en modo sandbox, desactivando la función system(), redirección de entrada con getline, salida redirección con print y printf, y carga de extensiones dinámicas. La ejecución de comandos (a través de canalizaciones) también está deshabilitada.

-t,

- -lint-old Proporciona advertencias sobre construcciones que no son portátiles a la versión original de UNIX awk.

-V,

- -version Imprime la información de la versión para esta copia particular de gawk en la salida estándar. Esto es útil cuando se informa de errores. De acuerdo con los estándares de codificación GNU, estas opciones provocan una salida inmediata y exitosa.

- -

Señalar el final de las opciones. Esto es útil para permitir que otros argumentos del propio programa AWK comiencen con un "-".

En el modo de compatibilidad, cualquier otra opción se marca como no válida, pero se ignora de lo contrario. En el funcionamiento normal, siempre que se haya proporcionado el texto del programa, las opciones desconocidas se pasan al programa AWK en la matriz ARGV para su procesamiento.

Para la compatibilidad con POSIX, se puede usar la opción -W, seguida del nombre de una opción larga.

EJECUCIÓN DEL PROGRAMA AWK

Un programa AWK consta de una secuencia de directivas opcionales, declaraciones de patrón de acción y definiciones de funciones opcionales.

@include "filename "
@load "filename "
@namespace "name "
pattern { action statements }
function name(parameter list) { statements }

Gawk primero lee el código fuente del programa desde el(los) archivo de programa(s) si se especifica, desde los argumentos hasta - -fuente, o desde el primer no -argumento de opción en la línea de comando. Las opciones -f y - -source se pueden usar varias veces en la línea de comandos. Gawk lee el texto del programa como si todos los archivos de programa y los textos fuente de la línea de comandos se hubieran concatenado juntos.

Además, las líneas que comienzan con @include se pueden usar para incluir otros archivos fuente en su programa. Esto es equivalente a usar la opción - -include.

Las líneas que comienzan con @load se pueden usar para cargar funciones de extensión en su programa. Esto es equivalente a usar la opción - -load.

La variable de entorno AWKPATH especifica una ruta de búsqueda para usar al buscar archivos de origen nombrados con las opciones -f y - -include. Si esta variable no existe, la ruta predeterminada es ".:/usr/local/share/awk". (El directorio real puede variar, dependiendo de cómo se creó e instaló gawk). Si un nombre de archivo dado a la opción -f contiene un carácter "/", no se se realiza la búsqueda.

La variable de entorno AWKLIBPATH especifica una ruta de búsqueda para usar al encontrar archivos de origen nombrados con la opción - -load. Si esta variable no existe, la ruta predeterminada es "/usr/local/lib/gawk". (El directorio real puede variar, dependiendo de cómo se creó e instaló gawk).

Gawk ejecuta programas AWK en el siguiente orden. En primer lugar, se realizan todas las asignaciones de variables especificadas a través de la opción -v. A continuación, gawk compila el programa en un formato interno. Luego, gawk ejecuta el código en la(s) regla(s) BEGIN (si corresponde), y luego procede a leer cada archivo nombrado en el ARGV matriz (hasta ARGV[ARGC-1]). Si no hay archivos nombrados en la línea de comando, gawk lee la entrada estándar.

Si un nombre de archivo en la línea de comando tiene la forma var=val, se trata como una asignación de variable. A la variable var se le asignará el valor val. (Esto sucede después de ejecutar cualquier regla BEGIN).

Si el valor de un elemento particular de ARGV está vacío (""), gawk lo salta.

Para cada archivo de entrada, si existe una regla BEGINFILE, gawk ejecuta el código asociado antes de procesar el contenido del archivo. De manera similar, gawk ejecuta el código asociado con las reglas ENDFILE después de procesar el archivo.

Para cada registro en la entrada, gawk prueba para ver si coincide con algún patrón en el programa AWK. Para cada patrón que coincida con el registro, gawk ejecuta la acción asociada. Los patrones se prueban en el orden en que aparecen en el programa.

Finalmente, después de agotar toda la entrada, gawk ejecuta el código en la(s) regla(s) END (si corresponde).

Directorios de línea de comandos

De acuerdo con POSIX, los archivos nombrados en la línea de comando awk deben ser archivos de texto. El comportamiento es ``indefinido'' si no lo son. La mayoría de las versiones de awk tratan un directorio en la línea de comandos como un error fatal.

Para gawk, un directorio en la línea de comando genera una advertencia, pero de lo contrario se omite. Si se da alguna de las opciones - -posix o - -tradicional, entonces gawk vuelve a tratar los directorios en la línea de comando como un error fatal. .

VARIABLES, REGISTROS Y CAMPOS

Las variables AWK son dinámicas; surgen cuando se usan por primera vez. Sus valores son números de punto flotante o cadenas, o ambos, dependiendo de cómo se utilicen. Además, gawk permite que las variables tengan un tipo de expresión regular. AWK también tiene matrices unidimensionales; se pueden simular matrices con múltiples dimensiones. Sin embargo, gawk proporciona verdaderas matrices de matrices. Varias variables predefinidas se establecen a medida que se ejecuta un programa; estos se describen según sea necesario y se resumen a continuación.

Registros

Normalmente, los registros están separados por caracteres de nueva línea. Puede controlar cómo se separan los registros asignando valores a la variable integrada RS. Consulte https://www.gnu.org/software/gawk/manual/html_node/Records.html para obtener más información.

Campos

A medida que se lee cada registro de entrada, gawk divide el registro en campos, usando el valor de la variable FS como separador de campo. Además, FIELDWIDTHS y FPAT se pueden usar para controlar la división de campos de entrada. Vea los detalles, comenzando en https://www.gnu.org/software/gawk/manual/html_node/Fields.html.

Se puede hacer referencia a cada campo en el registro de entrada por su posición: $1, $2, etc. $0 es el registro completo, incluidos los espacios en blanco iniciales y finales.

La variable NF se establece en el número total de campos en el registro de entrada.

Las referencias a campos inexistentes (es decir, campos después de $NF) producen la cadena nula. Sin embargo, la asignación a un campo inexistente (p. ej., $ (NF+2)=5) aumenta el valor de NF, crea cualquier campo intermedio con el nulo cadena como sus valores, y hace que se vuelva a calcular el valor de $0, con los campos separados por el valor de OFS. Las referencias a campos numerados negativos provocan un error fatal. La disminución de NF hace que se pierdan los valores de los campos más allá del nuevo valor y se vuelva a calcular el valor de $0, con los campos separados por el valor de OFS.

Asignar un valor a un campo existente hace que se reconstruya todo el registro cuando se hace referencia a $0. De manera similar, asignar un valor a $0 hace que el registro se vuelva a dividir, creando nuevos valores para los campos.

Variables integradas

Las variables integradas de Gawk  se enumeran a continuación. Esta lista es deliberadamente concisa. Para obtener más información, consulte https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables.

ARGC

El número de argumentos de la línea de comando.

ARGIND

El índice en ARGV del archivo actual que se está procesando.

ARGV

Matriz de argumentos de línea de comando. La matriz está indexada de 0 a ARGC - 1.

BINMODE

En sistemas que no son POSIX, especifica el uso del modo "binario" para todas las E/S de archivos. Consulte https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html para obtener más información.

CONVFMT

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

ENVIRON

Una matriz que contiene los valores del entorno actual. La matriz está indexada por las variables de entorno, siendo cada elemento el valor de esa variable.

ERRNO

Si se produce un error del sistema al realizar una redirección para getline, durante una lectura de getline o durante un close(), entonces ERRNO se establece en una cadena que describe el error. El valor está sujeto a traducción en idiomas distintos del inglés.

FIELDWIDTHS

Una lista separada por espacios en blanco de anchos de campo. Cuando se establece, gawk analiza la entrada en campos de ancho fijo, en lugar de usar el valor de la variable FS como separador de campo. Opcionalmente, cada ancho de campo puede estar precedido por un valor separado por dos puntos que especifica el número de caracteres que se omitirán antes de que comience el campo.

FILENAME

El nombre del archivo de entrada actual. Si no se especifica ningún archivo en la línea de comando, el valor de FILENAME es "-". Sin embargo, FILENAME no está definido dentro de la regla BEGIN (a menos que lo establezca getline).

FNR

El número de registro de entrada en el archivo de entrada actual.

FPAT

Una expresión regular que describe el contenido de los campos en un registro. Cuando se establece, gawk analiza la entrada en campos, donde los campos coinciden con la expresión regular, en lugar de usar el valor de FS como separador de campo.

FS

El separador de campo de entrada, un espacio por defecto. Consulte https://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html para obtener más información.

FUNCTAB

Una matriz cuyos índices y valores correspondientes son los nombres de todas las funciones de extensión o definidas por el usuario en el programa. NOTA: no puede usar la instrucción delete con la matriz FUNCTAB.

IGNORECASE

Controla la distinción entre mayúsculas y minúsculas de todas las operaciones de cadenas y expresiones regulares. Consulte https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html para obtener más información.

LINT

Proporciona un control dinámico de la opción - -lint desde dentro de un programa AWK.

NF

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

NR

El número total de registros de entrada vistos hasta ahora.

OFMT

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

OFS

El separador de campo de salida, un espacio por defecto.

ORS

El separador de registros de salida, por defecto una nueva línea.

PREC

La precisión de trabajo de números de punto flotante de precisión arbitraria, 53 por defecto.

PROCINFO

Los elementos de esta matriz brindan acceso a información sobre el programa AWK en ejecución. Consulte https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset para obtener más información.

ROUNDMODE

El modo de redondeo que se usará para la aritmética de precisión arbitraria en números, por defecto "N" (modo IEEE-754 roundTiesToEven). Consulte https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode para obtener más información.

RS

El separador de registros de entrada, por defecto una nueva línea.

RT

El terminador de registros. Gawk establece RT en el texto de entrada que coincide con el carácter o la expresión regular especificada por RS.

RSTART

El índice del primer carácter que coincide con match(); 0 si no hay coincidencia.

RLENGTH

La longitud de la cadena que coincide con match(); -1 si no hay coincidencia.

SUBSEP

La cadena utilizada para separar varios subíndices en los elementos de la matriz, por defecto "\034".

SYMTAB

Una matriz cuyos índices son los nombres de todas las variables globales y matrices definidas actualmente en el programa. No puede usar la instrucción delete con la matriz SYMTAB, ni asignar elementos con un índice que no sea un nombre de variable.

TEXTDOMAIN

El dominio de texto del programa AWK; se utiliza para encontrar las traducciones localizadas para las cadenas del programa.

arreglos

Las matrices se subíndicen con una expresión entre corchetes ([ y ]). Si la expresión es una lista de expresiones (expr, expr . . .), entonces el subíndice de la matriz es una cadena que consiste en la concatenación del valor (cadena) de cada expresión, separados por el valor de la variable SUBSEP. Esta función se utiliza para simular matrices de dimensiones múltiples. Por ejemplo:

i = "A";  j = "B";  k = "C"
x[i, j, k] = "hello, world\n"

asigna la cadena "hello, world\n" al elemento de la matriz x que está indexado por la cadena "A\034B\034C" . Todas las matrices en AWK son asociativas, es decir, están indexadas por valores de cadena.

El operador especial in se puede usar para probar si una matriz tiene un índice que consta de un valor particular:

if (val in array)
	print array[val]

Si la matriz tiene varios subíndices, use (i, j) en la matriz.

La construcción in también se puede usar en un bucle for para iterar sobre todos los elementos de una matriz. Sin embargo, la construcción (i, j) in array solo funciona en pruebas, no en bucles for.

Se puede eliminar un elemento de una matriz mediante la instrucción delete. La instrucción delete también se puede usar para eliminar todo el contenido de una matriz, simplemente especificando el nombre de la matriz sin un subíndice.

gawk admite verdaderos arreglos multidimensionales. No requiere que dichas matrices sean ``rectangulares'' como en C o C++. Consulte https://www.gnu.org/software/gawk/manual/html_node/Arrays para obtener más información.

Espacios de nombres

Gawk proporciona una facilidad de namespace simple para ayudar a solucionar el hecho de que todas las variables en AWK son globales.

Un nombre calificado consta de dos identificadores simples unidos por dos puntos dobles (::). El identificador de la izquierda representa el espacio de nombres y el identificador de la derecha es la variable dentro de él. Se considera que todos los nombres simples (no calificados) están en el espacio de nombres "actual"; el espacio de nombres predeterminado es awk. Sin embargo, los identificadores simples que consisten únicamente en letras mayúsculas se fuerzan en el espacio de nombres awk, incluso si el espacio de nombres actual es diferente.

Cambia el espacio de nombres actual con una directiva @namespace "name ".

Los nombres de funciones integradas predefinidas estándar no se pueden usar como nombres de espacios de nombres. Los nombres de funciones adicionales proporcionados por gawk pueden usarse como nombres de espacios de nombres o como identificadores simples en otros espacios de nombres. Para obtener más detalles, consulte https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces.

Tipificación y conversión de variables

Las variables y los campos pueden ser números (coma flotante), cadenas o ambos. También pueden ser expresiones regulares. Cómo se interpreta el valor de una variable depende de su contexto. Si se usa en una expresión numérica, se tratará como un número; si se usa como una cadena, se tratará como una cadena.

Para forzar que una variable sea tratada como un número, agréguele cero; para obligarlo a ser tratado como una cadena, concatene con la cadena nula.

Las variables no inicializadas tienen el valor numérico cero y el valor de cadena "" (la cadena nula o vacía).

Cuando una cadena debe convertirse en un número, la conversión se realiza mediante strtod(3). Un número se convierte en una cadena utilizando el valor de CONVFMT como una cadena de formato para sprintf(3), con el valor numérico de la variable como argumento. Sin embargo, aunque todos los números en AWK son de coma flotante, los valores integrales siempre se convierten en enteros.

Gawk realiza comparaciones de la siguiente manera: si dos variables son numéricas, se comparan numéricamente. Si un valor es numérico y el otro tiene un valor de cadena que es una "cadena numérica", las comparaciones también se realizan numéricamente. De lo contrario, el valor numérico se convierte en una cadena y se realiza una comparación de cadenas. Por supuesto, dos cadenas se comparan como cadenas.

Tenga en cuenta que las constantes de cadena, como "57", son no cadenas numéricas, son constantes de cadena. La idea de "cadena numérica" solo se aplica a campos, entrada getline, elementos FILENAME, ARGV, elementos ENVIRON y los elementos de una matriz creada por split() o patsplit() que son cadenas numéricas. La idea básica es que la entrada del usuario, y solo la entrada del usuario, que parece numérica, debe tratarse de esa manera.

Constantes octales y hexadecimales

Puede usar constantes octales y hexadecimales de estilo C en el código fuente de su programa AWK. Por ejemplo, el valor octal 011 es igual al decimal 9 y el valor hexadecimal 0x11 es igual al decimal 17.

Constantes de cadena

Las constantes de cadena en AWK son secuencias de caracteres entre comillas dobles (como "valor"). Dentro de las cadenas, se reconocen ciertas secuencias de escape, como en C. Consulte https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences para los detalles.

Constantes de expresiones regulares

Una constante de expresión regular es una secuencia de caracteres encerrados entre barras diagonales (como /value/).

Las secuencias de escape descritas en el manual también se pueden usar dentro de expresiones regulares constantes (por ejemplo, /[ \t\f\n\r\v]/ coincide con caracteres de espacio en blanco).

Gawk proporciona constantes de expresión regular fuertemente tipadas. Estos se escriben con un símbolo inicial @ (así: @/value/). Estas constantes pueden asignarse a escalares (variables, elementos de matriz) y pasarse a funciones definidas por el usuario. Las variables así asignadas tienen el tipo de expresión regular.

PATRONES Y ACCIONES

AWK es un lenguaje orientado a líneas. El patrón viene primero, y luego la acción. Las declaraciones de acción se incluyen entre { y }. Puede que falte el patrón o que falte la acción, pero, por supuesto, no ambas cosas. Si falta el patrón, la acción se ejecuta para cada registro de entrada. Una acción faltante es equivalente a

{ print }

que imprime todo el registro.

Los comentarios comienzan con el carácter # y continúan hasta el final de la línea. Se pueden usar líneas vacías para separar declaraciones. Normalmente, una declaración termina con una nueva línea, sin embargo, este no es el caso de las líneas que terminan en una coma, {, ?, :, &&, o ||. Las líneas que terminan en do o else también tienen sus declaraciones automáticamente continuadas en la siguiente línea. En otros casos, se puede continuar una línea terminándola con "\", en cuyo caso se ignora la nueva línea. Sin embargo, un "\" después de un # no es especial.

Se pueden poner varias declaraciones en una línea separándolas con un “; ”. Esto se aplica tanto a las sentencias dentro de la parte de acción de un par patrón-acción (el caso habitual) como a las propias sentencias patrón-acción.

Patrones

Los patrones AWK pueden ser uno de los siguientes:

BEGIN
END
BEGINFILE
ENDFILE
/regular expression/
relational expression
pattern && pattern
pattern || pattern
pattern ? pattern : pattern
(pattern)
! pattern
pattern1, pattern2

BEGIN y END son dos tipos especiales de patrones que no se prueban con la entrada. Las partes de acción de todos los patrones BEGIN se fusionan como si todas las declaraciones se hubieran escrito en una sola regla BEGIN. Se ejecutan antes de que se lea cualquier entrada. De manera similar, todas las reglas END se fusionan y se ejecutan cuando se agota toda la entrada (o cuando se ejecuta una instrucción exit). Los patrones BEGIN y END no se pueden combinar con otros patrones en expresiones de patrón. Los patrones BEGIN y END no pueden tener partes de acción faltantes.

BEGINFILE y ENDFILE son patrones especiales adicionales cuyas acciones se ejecutan antes de leer el primer registro de cada archivo de entrada de la línea de comandos y después de leer el último registro de cada archivo. Dentro de la regla BEGINFILE, el valor de ERRNO es la cadena vacía si el archivo se abrió correctamente. De lo contrario, hay algún problema con el archivo y el código debe usar nextfile para omitirlo. Si no se hace eso, gawk produce su habitual error fatal para los archivos que no se pueden abrir.

Para patrones de /expresión regular/, la declaración asociada se ejecuta para cada registro de entrada que coincida con la expresión regular. Las expresiones regulares son esencialmente las mismas que las de egrep(1). Consulte https://www.gnu.org/software/gawk/manual/html_node/Regexp.html para obtener detalles sobre las expresiones regulares.

Una expresión relacional puede utilizar cualquiera de los operadores definidos a continuación en la sección de acciones. Estos generalmente prueban si ciertos campos coinciden con ciertas expresiones regulares.

Los operadores &&, || y ! son AND lógico, OR lógico y NOT lógico, respectivamente, como en C. -evaluación de circuitos, también como en C, y se utilizan para combinar expresiones de patrones más primitivas. Como en la mayoría de los idiomas, se pueden usar paréntesis para cambiar el orden de evaluación.

¿El ? El operador : es como el mismo operador en C. Si el primer patrón es verdadero, entonces el patrón utilizado para la prueba es el segundo patrón; de lo contrario, es el tercero. Solo se evalúa uno de los patrones segundo y tercero.

La forma patrón1, patrón2 de una expresión se denomina patrón de rango. Coincide con todos los registros de entrada comenzando con un registro que coincida con patrón1 y continuando hasta un registro que coincida con patrón2, inclusive. No se combina con ningún otro tipo de expresión de patrón.

Comportamiento

Las declaraciones de acción están encerradas entre llaves, { y }. Las declaraciones de acción consisten en las declaraciones habituales de asignación, condicionales y de bucle que se encuentran en la mayoría de los lenguajes. Los operadores, sentencias de control y sentencias de entrada/salida disponibles siguen el modelo de C.

Operadores

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

(. . .)

Agrupamiento

$

Referencia de campo.

++ - -

Incremento y decremento, tanto prefijo como posfijo.

^

Exponenciación.

+ - !

Más unario, menos unario y negación lógica.

* / %

Multiplicación, división y módulo.

+ -

Adición y sustracción.

space

Concatenación de cadenas.

| |&

E/S canalizada para getline, print y printf.

< > <= >= == !=

Los operadores relacionales regulares.

~ !~

Coincidencia de expresión regular, coincidencia negada.

in

Membresía de matriz.

&&

Y lógico.

||

O lógico.

?:

La expresión condicional de C. Esto tiene la forma expr1 ? expr2 : expr3 . Si expr1 es verdadero, el valor de la expresión es expr2, de lo contrario, es expr3. Solo se evalúa uno de expr2 y expr3.

= += -= *= /= %= ^=

Asignación. Tanto la asignación absoluta (var=valor) como la asignación de operadores (la otra formularios) son compatibles.

Declaraciones de control

Las sentencias de control son las siguientes:

if (condition) statement [ else statement ]
while (condition) statement
do statement while (condition)
for (expr1; expr2; expr3) statement
for (var in array) statement
break
continue
delete array [ index ]
delete array 
exit [ expression ]
{ statements }
switch (expression) {
case value|regex : statement
. . .
[ default: statement ]
}

Declaraciones de E/S

Las sentencias de entrada/salida son las siguientes:

close(file [, how])

Cierre un archivo abierto, tubería o coproceso. El cómo opcional solo debe usarse cuando se cierra un extremo de una tubería bidireccional a un coproceso. Debe ser un valor de cadena, ya sea "a" o "desde".

getline

Establecer $0 desde el siguiente registro de entrada; configure NF, NR, FNR, RT.

getline <file

Establecer $0 desde el siguiente registro de archivo; establezca NF, RT.

getline var

Establecer var desde el siguiente registro de entrada; establezca NR, FNR, RT.

getline var <file

Establecer var desde el siguiente registro de archivo; establecer RT.

command | getline [var]

Ejecute command, canalizando la salida a $0 o var, como arriba, y RT.

command |& getline [var]

Ejecute command como un coproceso que canaliza la salida a $0 o var, como se indicó anteriormente, y RT. (El comando también puede ser un socket. Consulte la subsección Nombres de archivos especiales, a continuación).

fflush([file ])

Vacíe cualquier búfer asociado con el archivo de salida abierto o canalice archivo. Si falta archivo o si es una cadena nula, entonces vacíe todos los archivos y conductos de salida abiertos.

next

Detener el procesamiento del registro de entrada actual. Lea el siguiente registro de entrada y comience a procesar de nuevo con el primer patrón en el programa AWK. Al llegar al final de los datos de entrada, ejecute las reglas END.

nextfile

Detener el procesamiento del archivo de entrada actual. El siguiente registro de entrada leído proviene del siguiente archivo de entrada. Actualice FILENAME y ARGIND, restablezca FNR a 1 y comience a procesar de nuevo con el primer patrón en el programa AWK. Al llegar al final de los datos de entrada, ejecute las reglas ENDFILE y END.

print

Imprime el registro actual. El registro de salida termina con el valor de ORS.

print expr-list

Imprimir expresiones. Cada expresión está separada por el valor de OFS. El registro de salida termina con el valor de ORS.

print expr-list >file

Imprimir expresiones en archivo. Cada expresión está separada por el valor de OFS. El registro de salida termina con el valor de ORS.

printf fmt, expr-list

Formatear e imprimir.

printf fmt, expr-list >file

Formatee e imprima en archivo.

system(cmd-line)

Ejecute el comando cmd-line y devuelva el estado de salida. (Es posible que esto no esté disponible en sistemas que no sean POSIX). Consulte https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions para detalles completos sobre el estado de salida.

Se permiten redirecciones de salida adicionales para print y printf.

print . . . >> file

Agregue la salida al archivo.

print . . . | command

Escribe en una pipa.

print . . . |& command

Envía datos a un coproceso o socket. (Consulte también la subsección Nombres de archivos especiales, a continuación).

El comando getline devuelve 1 en caso de éxito, cero al final del archivo y -1 en caso de error. Si el valor errno(3) indica que se puede volver a intentar la operación de E/S y PROCINFO["input ", " REINTENTAR"], luego se devuelve -2 en lugar de -1, y se pueden intentar más llamadas a getline. Ante un error, ERRNO se establece en una cadena que describe el problema.

NOTA: Si no se abre un socket bidireccional, se devuelve un error no fatal a la función de llamada. Si usa una canalización, un coproceso o un socket para getline, o desde print o printf dentro de un bucle, debe use close() para crear nuevas instancias del comando o socket. AWK no cierra automáticamente las canalizaciones, los sockets o los coprocesos cuando devuelven EOF.

Las versiones AWK de la instrucción printf y la función sprintf() son similares a las de C. Para obtener más información, consulte https://www.gnu.org/ software/gawk/manual/html_node/Printf.html.

Nombres de archivos especiales

Al realizar una redirección de E/S desde print o printf a un archivo, o a través de getline desde un archivo, bostezar reconoce ciertos nombres de archivo especiales internamente. Estos nombres de archivo permiten el acceso a los descriptores de archivos abiertos heredados del proceso principal de gawk  (generalmente el shell). Estos nombres de archivo también se pueden usar en la línea de comando para nombrar archivos de datos. Los nombres de archivo son:

-

La entrada estándar.

/dev/stdin

La entrada estándar.

/dev/stdout

La salida estándar.

/dev/stderr

La salida de error estándar.

/dev/fd/ n

El archivo asociado con el descriptor de archivo abierto n.

Los siguientes nombres de archivo especiales se pueden usar con el operador de coproceso |& para crear conexiones de red TCP/IP:

/inet/tcp/lport/rhost/rport
/inet4/tcp/lport/rhost/rport
/inet6/tcp/lport/rhost/rport

Archivos para una conexión TCP/IP en el puerto local lport al host remoto rhost en el puerto remoto rport. Utilice un puerto de 0 para que el sistema elija un puerto. Utilice /inet4 para forzar una conexión IPv4 y /inet6 para forzar una conexión IPv6. Plain /inet utiliza el valor predeterminado del sistema (probablemente IPv4). Solo se puede utilizar con el operador de E/S bidireccional |&.

/inet/udp/lport/rhost/rport
/inet4/udp/lport/rhost/rport
/inet6/udp/lport/rhost/rport

Similar, pero usa UDP/IP en lugar de TCP/IP.

Funciones numéricas

AWK tiene las siguientes funciones aritméticas integradas:

atan2(y, x)

Devuelve el arcotangente de y/x en radianes.

cos(expr)

Devuelve el coseno de expr, que está en radianes.

exp(expr)

La función exponencial.

int(expr)

Truncar a entero.

intdiv(num, denom, result)

Trunca num y denom a enteros. Devuelve el cociente de num dividido por denom en resultado["cociente"] y el resto en resultado["resto"]. Esta es una extensión gawk, principalmente valiosa cuando se trabaja con números enteros arbitrariamente grandes.

log(expr)

La función logaritmo natural.

rand()

Devuelve un número aleatorio N, entre cero y uno, tal que 0 ≤ N < 1.

sin(expr)

Devuelve el seno de expr, que está en radianes.

sqrt(expr)

Devuelve la raíz cuadrada de expr.

srand([expr ])

Utilice expr como la nueva semilla para el generador de números aleatorios. Si no se proporciona expr, utilice la hora del día. Devuelve la semilla anterior para el generador de números aleatorios.

Funciones de cadena

Gawk tiene las siguientes funciones de cadena integradas; los detalles se proporcionan en https://www.gnu.org/software/gawk/manual/html_node/String-Functions.

asort(s [, d [, how] ])

Devuelve el número de elementos en la matriz de origen s. Ordene el contenido de s usando las reglas normales de gawk  para comparar valores, y reemplace los índices de los valores ordenados s con enteros secuenciales que comienzan con 1. Si se especifica la matriz de destino opcional d, primero duplique s en d y luego ordene d, dejando los índices de la matriz fuente s sin cambios. La cadena opcional how controla la dirección y el modo de comparación. Los valores válidos para cómo se describen en https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions. Se permite que s y d sean la misma matriz; esto solo tiene sentido cuando se proporciona el tercer argumento también.

asorti(s [, d [, how] ])

Devuelve el número de elementos en la matriz de origen s. El comportamiento es el mismo que el de asort(), excepto que los índices de la matriz se usan para ordenar, no los valores de la matriz. Una vez hecho esto, la matriz se indexa numéricamente y los valores son los de los índices originales. Los valores originales se pierden; por lo tanto, proporcione una segunda matriz si desea conservar el original. El propósito de la cadena opcional cómo es el mismo que para asort(). Aquí también, s y d pueden ser la misma matriz; esto solo tiene sentido cuando se proporciona el tercer argumento también.

gensub(r, s, h [, t])

Busque en la cadena de destino t coincidencias de la expresión regular r. Si h es una cadena que comienza con g o G, reemplace todas las coincidencias de r con s . De lo contrario, h es un número que indica qué coincidencia de r reemplazar. Si no se proporciona t, use $0 en su lugar. Dentro del texto de reemplazo s, la secuencia \n, donde n es un dígito del 1 al 9, puede usarse para indicar solo el texto que coincidía con la subexpresión entre paréntesis n. La secuencia \0 representa todo el texto coincidente, 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 de destino original no cambia .

gsub(r, s [, t])

Para cada subcadena que coincida con la expresión regular r en la cadena t, sustituya la cadena s y devuelva el número de sustituciones. Si no se proporciona t, utilice $0. Un & en el texto de reemplazo se reemplaza con el texto que realmente coincidió. Use \& para obtener un & literal. (Debe escribirse como "\\&"; consulte https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details para obtener una discusión más completa de las reglas para los signos y 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 cero si t no está presente. (Esto implica que los índices de caracteres comienzan en uno).

length([s])

Devuelve la longitud de la cadena s, o la longitud de $0 si no se proporciona s. Con un argumento de matriz, longitud() devuelve el número de elementos de la matriz.

match(s, r [, a])

Devuelve la posición en s donde aparece la expresión regular r, o cero si r no está presente, y establece los valores de RSTART y LARGO. Tenga en cuenta que el orden de los argumentos es el mismo que para el operador ~: str ~ re.

Consulte https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions para obtener una descripción de cómo la matriz a se llena si se proporciona.

patsplit(s, a [, r [, seps] ])

Divida la cadena s en la matriz a y la matriz de separadores seps en la expresión regular r y devuelva el numero de campos. Los valores de los elementos son las partes de s que coincidieron con r. El valor de seps[i] es el separador posiblemente nulo que apareció después de a[i]. El valor de seps[0] es el separador inicial posiblemente nulo. Si se omite r, se usa FPAT en su lugar. Las matrices a y seps se borran primero. La división se comporta de manera idéntica a la división de campos con FPAT.

split(s, a [, r [, seps] ])

Divida la cadena s en la matriz a y la matriz de separadores seps en la expresión regular r y devuelva el numero de campos. Si se omite r, se usa FS en su lugar. Las matrices a y seps se borran primero. seps[i] es el separador de campos que coincide con r entre a[<i] y a[i+1]. La división se comporta de manera idéntica a la división de campo .

sprintf(fmt , expr-list )

Imprima expr-list de acuerdo con fmt y devuelva la cadena resultante.

strtonum(str)

Examine str y devuelva su valor numérico. Si str comienza con un 0 inicial, trátelo como un número octal. Si str comienza con un 0x o 0X inicial, trátelo como un número hexadecimal. De lo contrario, suponga que es un número decimal.

sub(r, s [, t])

Al igual que gsub(), pero reemplaza solo la primera subcadena coincidente. Devuelve cero o uno.

substr(s, i [, n])

Devuelve la subcadena de caracteres n como máximo de s que comienza en i. Si se omite n, utilice el resto de s.

tolower(str)

Devuelve una copia de la cadena str, con todos los caracteres en mayúsculas en str traducidos a sus equivalentes en minúsculas correspondientes. Los caracteres no alfabéticos se dejan sin cambios.

toupper(str)

Devuelve una copia de la cadena str, con todos los caracteres en minúsculas en str traducidos a sus equivalentes en mayúsculas correspondientes. Los caracteres no alfabéticos se dejan sin cambios.

Gawk reconoce multibyte. Esto significa que index(), length(), substr() y match() funcionan en términos de caracteres, no de bytes.

Funciones de tiempo

Gawk proporciona las siguientes funciones para obtener marcas de tiempo y formatearlas. Los detalles se proporcionan en https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.

mktime(datespec [, utc-flag])

Convierta datespec en una marca de tiempo del mismo formato que devuelve systime() y devuelva el resultado. Si utc-flag está presente y no es cero ni nulo, se supone que la hora está en la zona horaria UTC; de lo contrario, se supone que la hora está en la zona horaria local. Si datespec no contiene suficientes elementos o si el tiempo resultante está fuera de rango, mktime() devuelve -1. Consulte https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions para obtener detalles de datespec.

strftime([format [, timestamp[, utc-flag]]])

Formatee timestamp de acuerdo con la especificación en format. Si utc-flag está presente y es distinto de cero o no nulo, el resultado está en UTC; de lo contrario, el resultado está en la hora local. La marca de tiempo debe tener el mismo formato que la devuelta por systime(). Si falta timestamp, se utiliza la hora actual del día. Si falta formato, se utiliza un formato predeterminado equivalente a la salida de fecha(1). El formato predeterminado está disponible en PROCINFO["strftime"]. Consulte la especificación de la función strftime() en ISO C para conocer las conversiones de formato que se garantiza que estarán disponibles.

systime()

Devuelve la hora actual del día como el número de segundos desde la Época (1970-01-01 00:00:00 UTC en sistemas POSIX).

Funciones de manipulación de bits

Gawk proporciona las siguientes funciones de manipulación de bits. Funcionan convirtiendo valores de coma flotante de precisión doble en enteros uintmax_t, realizando la operación y luego convirtiendo el resultado de nuevo a coma flotante. Pasar operandos negativos a cualquiera de estas funciones provoca un error fatal.

Las funciones son:

and(v1, v2 [, ...])

Devuelve el AND bit a bit de los valores proporcionados en la lista de argumentos. Debe haber al menos dos.

compl(val)

Devuelve el complemento bit a bit de val.

lshift(val, count)

Devuelve el valor de val, desplazado a la izquierda por count bits.

or(v1, v2 [, ...])

Devuelve el OR bit a bit de los valores proporcionados en la lista de argumentos. Debe haber al menos dos.

rshift(val, count)

Devuelve el valor de val, desplazado a la derecha por count bits.

xor(v1, v2 [, ...])

Devuelve el XOR bit a bit de los valores proporcionados en la lista de argumentos. Debe haber al menos dos.

Tipo Funciones

Las siguientes funciones proporcionan información relacionada con el tipo sobre sus argumentos.

isarray(x)

Devuelve verdadero si x es una matriz, de lo contrario, devuelve falso.

typeof(x)

Devuelve una cadena que indica el tipo de x. La cadena será una de "matriz", "número", "regexp", "cadena", "strnum", "sin asignar" o "indefinido".

Funciones de Internacionalización

Las siguientes funciones se pueden usar desde su programa AWK para traducir cadenas en tiempo de ejecución. Para obtener detalles completos, consulte https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions.

bindtextdomain(directory [, domain])

Especifique el directorio donde gawk busca los archivos .gmo, en caso de que no se puedan colocar en las ubicaciones ``estándar''. Devuelve el directorio donde domain está ``enlazado''.

El dominio predeterminado es el valor de TEXTDOMAIN. Si directorio es la cadena nula (""), entonces bindtextdomain() devuelve el enlace actual para el dominio dado .

dcgettext(string [, domain [, category]])

Devuelve la traducción de string en el dominio de texto domain para la categoría local category. El valor predeterminado para dominio es el valor actual de TEXTDOMAIN. El valor predeterminado para categoría es "LC_MESSAGES".

dcngettext(string1, string2, number [, domain [, category]])

Devuelve la forma plural utilizada para número de la traducción de cadena1 y cadena2 en el dominio de texto dominio para la categoría local <categoría. El valor predeterminado para dominio es el valor actual de TEXTDOMAIN. El valor predeterminado para categoría es "LC_MESSAGES".

Funciones con valores booleanos

Puede crear valores especiales de tipo booleano; consulte el manual para saber cómo funcionan y por qué existen.

mkbool(expression )

Según el valor booleano de expression, devuelve un valor verdadero o un valor falso. Los valores verdaderos tienen valor numérico uno. Los valores falsos tienen valor numérico cero.

FUNCIONES DEFINIDAS POR EL USUARIO

Las funciones en AWK se definen de la siguiente manera:

función nombre(lista de parámetros) { declaraciones }

Las funciones se ejecutan cuando se las llama desde expresiones en patrones o acciones. Los parámetros reales proporcionados en la llamada a la función se utilizan para instanciar los parámetros formales declarados en la función. Las matrices se pasan por referencia, otras variables se pasan por valor.

Las variables locales se declaran como parámetros adicionales en la lista de parámetros. La convención es separar las variables locales de los parámetros reales mediante espacios adicionales en la lista de parámetros. Por ejemplo:

function  f(p, q,     a, b)	# a and b are local
{
	. . .
}

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

Se requiere el paréntesis izquierdo en una llamada de función para seguir inmediatamente al nombre de la función, sin ningún espacio en blanco intermedio. Esta restricción no se aplica a las funciones integradas enumeradas anteriormente.

Las funciones pueden llamarse entre sí y pueden ser recursivas. Los parámetros de función utilizados como variables locales se inicializan en la cadena nula y el número cero al invocar la función.

Usa return expr para devolver un valor de una función. El valor de retorno no está definido si no se proporciona ningún valor, o si la función regresa “cayendo” al final.

Las funciones pueden llamarse indirectamente. Para ello, asigne el nombre de la función a llamar, en forma de cadena, a una variable. Luego use la variable como si fuera el nombre de una función, con el prefijo @, así:

function myfunc()
{
	print "myfunc called"
	. . .
}

{	. . .
	the_func = "myfunc"
	@the_func()	# call through the_func to myfunc
	. . .
}

Si se proporcionó - -lint, gawk advierte sobre llamadas a funciones indefinidas en tiempo de análisis, en lugar de en tiempo de ejecución. Llamar a una función indefinida en tiempo de ejecución es un error fatal.

NUEVAS FUNCIONES DE CARGA DINÁMICA

Puede agregar dinámicamente nuevas funciones escritas en C o C++ al intérprete gawk en ejecución con la instrucción @load. Los detalles completos están más allá del alcance de esta página del manual; consulte https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions.

SEÑALES

El generador de perfiles gawk acepta dos señales. SIGUSR1 hace que descargue un perfil y una pila de llamadas de función al archivo de perfil, que es awkprof.out, o cualquier archivo que se haya nombrado con - -profile opción. Luego continúa funcionando. SIGHUP hace que gawk descargue la pila de llamadas de función y perfil y luego salga.

INTERNACIONALIZACIÓN

Las constantes de cadena son secuencias de caracteres entre comillas dobles. En entornos de habla no inglesa, es posible marcar cadenas en el programa AWK para que requieran traducción al idioma natural local. Tales cadenas están marcadas en el programa AWK con un guión bajo ("_"). Por ejemplo,

gawk 'BEGIN { print "hello, world" }'

siempre imprime hola, mundo. Pero,

gawk 'BEGIN { print _"hello, world" }'

podría imprimir bonjour, monde en Francia. Consulte https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization para conocer los pasos necesarios para producir y ejecutar un programa AWK localizable.

EXTENSIONES GNU

Gawk tiene un número demasiado grande de extensiones para POSIX awk. Se describen en https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html. Todas las extensiones se pueden deshabilitar invocando gawk con las opciones - -tradicional o - -posix.

VARIABLES DE ENTORNO

La variable de entorno AWKPATH se puede utilizar para proporcionar una lista de directorios que observa cuando busca archivos nombrados a través de -f, - -file, -i y - -include opciones, y la directiva @include. Si la búsqueda inicial falla, se vuelve a buscar la ruta después de agregar .awk al nombre del archivo.

La variable de entorno AWKLIBPATH se puede usar para proporcionar una lista de directorios que observa cuando busca archivos nombrados a través de -l y - -cargar opciones.

La variable de entorno GAWK_PERSIST_FILE, si está presente, especifica un archivo para usar como almacenamiento de respaldo para la memoria persistente. Esta es una función experimental. Consulte GAWK: Programación eficaz de AWK para obtener más información.

La variable de entorno GAWK_READ_TIMEOUT se puede usar para especificar un tiempo de espera en milisegundos para leer la entrada de una terminal, tubería o comunicación bidireccional, incluidos los enchufes.

Para la conexión a un host remoto a través de un socket, GAWK_SOCK_RETRIES controla el número de reintentos y GAWK_MSEC_SLEEP el intervalo entre reintentos. El intervalo está en milisegundos. En los sistemas que no admiten usleep(3), el valor se redondea a un número entero de segundos.

Si existe POSIXLY_CORRECT en el entorno, entonces gawk se comporta exactamente como si se hubiera especificado - -posix en la línea de comando. Si se ha especificado - -lint, gawk emite un mensaje de advertencia a tal efecto.

Configure GAWK_NO_MPFR_WARN en el entorno para silenciar la advertencia sobre el modo MPFR obsoleto.

ESTADO DE SALIDA

Si la instrucción exit se usa con un valor, entonces gawk sale con el valor numérico que se le ha dado.

De lo contrario, si no hubo problemas durante la ejecución, gawk sale con el valor de la constante C EXIT_SUCCESS. Esto suele ser cero.

Si ocurre un error, gawk sale con el valor de la constante C EXIT_FAILURE. Este suele ser uno.

Si gawk sale debido a un error fatal, el estado de salida es 2. En los sistemas que no son POSIX, este valor puede asignarse a EXIT_FAILURE.

INFORMACIÓN DE VERSIÓN

Esta página del manual documenta gawk, versión 5.2.

AUTORES

La versión original de UNIX awk fue diseñada e implementada por Alfred Aho, Peter Weinberger y Brian Kernighan de Bell Laboratories. Brian Kernighan continúa manteniéndolo y mejorándolo.

Paul Rubin y Jay Fenlason, de la Free Software Foundation, escribieron gawk, para que fuera compatible con la versión original de awk distribuida en Seventh Edition UNIX. John Woods contribuyó con una serie de correcciones de errores. David Trueman, con contribuciones de Arnold Robbins, hizo que gawk fuera compatible con la nueva versión de UNIX awk. Arnold Robbins es el mantenedor actual.

Consulte GAWK: Programación efectiva de AWK para obtener una lista completa de los colaboradores de gawk y su documentación.

Consulte el archivo README en la distribución gawk para obtener información actualizada sobre los mantenedores y qué puertos son compatibles actualmente.

INFORMES DE ERRORES

Si encuentra un error en gawk, utilice el programa gawkbug(1) para informarlo.

Se proporcionan instrucciones completas para informar un error en https://www.gnu.org/software/gawk/manual/html_node/Bugs.html. Por favor lea atentamente y siga las instrucciones que se proporcionan allí. Esto hará que la notificación y resolución de errores sea mucho más fácil para todos los involucrados. En realidad.

INSECTOS

La opción -F no es necesaria dada la función de asignación de variables de la línea de comando; permanece solo por compatibilidad con versiones anteriores.

Esta página del manual es demasiado larga; gawk tiene demasiadas funciones.

VER TAMBIÉN

egrep(1), sed(1), gawkbug(1), printf(3), and strftime(3).

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

GAWK: Effective AWK Programming, Edition 5.2, shipped with the gawk source. The current version of this document is available online at https://www.gnu.org/software/gawk/manual.

The GNU gettext documentation, available online at https://www.gnu.org/software/gettext.

EJEMPLOS

Print and sort the login names of all users:

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

Count lines in a file:

		{ nlines++ }
	END	{ print nlines }

Precede each line by its number in the file:

	{ print FNR, $0 }

Concatenate and line number (a variation on a theme):

	{ print NR, $0 }

Run an external command for particular lines of data:

	tail -f access_log |
	awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'

AGRADECIMIENTOS

Brian Kernighan brindó una valiosa asistencia durante las pruebas y la depuración. Le agradecemos.

PERMISOS DE COPIA

Copyright © 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Fundación de Software Libre, Inc.

Se otorga permiso para hacer y distribuir copias textuales de esta página del manual siempre que el aviso de derechos de autor y este aviso de permiso se conserven en todas las copias.

Se otorga permiso para procesar este archivo a través de troff e imprimir los resultados, siempre que el documento impreso lleve un aviso de permiso de copia idéntico a este excepto por la eliminación de este párrafo (este párrafo no es relevante para la página impresa del manual).

Se otorga permiso para copiar y distribuir versiones modificadas de esta página de manual bajo las condiciones para la copia textual, siempre que todo el trabajo derivado resultante se distribuya bajo los términos de un aviso de permiso idéntico a este.

Se otorga permiso para copiar y distribuir traducciones de la página de este manual a otro idioma, bajo las condiciones anteriores para versiones modificadas, excepto que este aviso de permiso se puede indicar en una traducción aprobada por la Fundación.