A.W.K.

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 3 de julio de 2022; la verificación requiere 1 edición .
A.W.K.
clase de idioma guionado , procedimental , basado en datos
Apareció en 1977
Autor Alfred Aho , Peter Weinberger y Brian Kernighan
Desarrollador Alfred Aho , Brian Kernigan y Peter Weinberger [d]
Liberar POSIX.1-2017
sistema de tipos No
Implementaciones principales awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (compilador), Awka (compilador)
Dialectos viejo awk oawk 1977, nuevo awk nawk 1985, GNU Awk gawk
sido influenciado C , SNOBOL 4, carcasa Bourne
influenciado Perl , Korn Shell ( ksh93 , dtksh , tksh ), Lua
 Archivos multimedia en Wikimedia Commons

AWK  es un lenguaje de secuencias de comandos similar a C para el análisis y procesamiento línea por línea de un flujo de entrada (por ejemplo, un archivo de texto) de acuerdo con patrones dados ( expresiones regulares ). Se puede utilizar en secuencias de comandos de línea de comandos .

El nombre AWK se compone de las primeras letras de los nombres de los desarrolladores del lenguaje: Aho , Weinberger ( ing.  Peter J. Weinberger ) y Kernighan . La primera versión fue escrita en 1977 en AT&T Bell Laboratories .

Estructura del programa

AWK trata el flujo de entrada como una lista de entradas. Cada entrada se divide en campos. En base a esta información, se realiza algún algoritmo de procesamiento definido por el programador. De forma predeterminada, el separador de registros es un carácter de nueva línea (es decir, los registros son lo mismo que líneas), el separador de campos es un carácter de espacio o tabulación, o una secuencia de tales caracteres. Los caracteres separadores se pueden definir explícitamente en el programa. El carácter separador de campo también se puede especificar en la línea de comando.

Un programa AWK consta de declaraciones (reglas) que se parecen a:

plantilla { acción } plantilla { acción } ...

Cada entrada se compara con todos los patrones, y cada vez que coincide con el patrón, se realiza la acción especificada. Si no se especifica la plantilla , la acción se realiza para cualquier entrada. Si no se especifica ninguna acción , se muestra la entrada. AWK también tiene 2 plantillas predefinidas BEGIN y END . BEGIN se ejecuta antes de que se procese el flujo de entrada. FIN: después de procesar el último registro del flujo de entrada.

Una acción puede consistir en una secuencia de declaraciones separadas por un punto y coma, una nueva línea o un paréntesis de cierre.

Construcciones del lenguaje

Condiciones

if ( condición ) entonces { Lista de acciones 1 } else { Lista de acciones 2 }

Ciclos

hacer do { Cuerpo del bucle } while ( condición ) mientras while ( condición ) { Cuerpo del bucle } para (forma de índice)

El bucle for, en una forma orientada al procesamiento de matrices de índices , se ve así:

for ( sección de inicialización ; sección de condición ; sección del iterador de actualización ) { Cuerpo del bucle } para (forma asociativa)

El bucle for, en una forma orientada al procesamiento de matrices asociativas , se ve así:

for ( iterador en matriz ) { cuerpo del bucle }

Variables integradas

Variable Contenido Valor por defecto
ARGC Número de argumentos de línea de comando -
ARGV Matriz de argumentos de línea de comando -
REINAR Matriz que contiene variables de entorno -
NOMBRE DEL ARCHIVO Archivo de entrada procesado -
FNR Número de registro en el archivo actual -
FS Separador de campo de registro en la entrada espacio(s) y/o tabulaciones
NF Número de campos en el registro actual -
NR Número de registro (número total de registros leídos) -
OFMT Formato de impresión de números %.6g
OFS Separador de campo de registro de salida (carácter) espacio(s) y/o tabulaciones
SRO Separador de registros en la salida del programa AWK (carácter) \0
RS Separador de registro de entrada (carácter) \0
RINICIO La posición del comienzo de la subcadena encontrada por la funciónmatch -
LONGITUD La longitud de la subcadena encontrada por la función.match -
SUBSEP Separador de índice en matrices multidimensionales \034

Funciones integradas

Ejemplos

¡Hola mundo! »

COMENZAR { imprime "¡Hola mundo!" ; salir }

Imprimiendo la longitud de la línea más larga:

{ if ( longitud ( $ 0 ) > max ) max = longitud ( $ 0 ) } END { print max }

Imprima todas las líneas de más de 80 caracteres:

{ si ( longitud ( $ 0 ) > 80 ) imprime $ 0 }

Imprime todas las líneas que tienen al menos un campo:

NF > 0

Imprimir el número de líneas en un archivo:

FIN { imprimir NR }

Imprimiendo líneas cuyos números son múltiplos de 3:

{ si ( FNR % 3 == 0 ) imprime $ 0 }

Imprima el resto de la línea de entrada después de los tres primeros campos:

{ # encuentra el inicio del 4to campo... coincidencia ( $ 0 , /[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*[^ \t]* [ \t]*/ ) # ...imprime el resto de la cadena de entrada desde la posición encontrada print substr ( $ 0 , 1 + RLENGTH ) }

Enlaces