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 .
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.
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 }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 |
¡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 > 0Imprimir 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 ) }Lenguajes de programación | |
---|---|
|