Awk

Lenguaje de programación AWK
Ejemplo de uso deawk
AutorAlfred Aho , Peter Weinberger y Brian Kernighan
Fecha de origen1977
Ultima versiónEstándar IEEE 1003.1-2008 (POSIX) / 1985
Usopuede manipular cadenas, enteros y decimales, expresiones regulares
Paradigmassecuencias de comandos , procedimental , basado en datos [1]
MecanografíaDébil
Influenciado porC , SNOBOL 4, carcasa Bourne
InfluyóTcl , AMPL , Perl , shell Korn ( ksh93 , dtksh , tksh ), Lua
Implementación de referencia
Implementaciónawk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (compilador), Awka (compilador)
Sistema operativoMultiplataforma

AWK (de las iniciales de los apellidos de sus autores, Alfred Aho , Peter Weinberger y Brian Kernighan ) es un lenguaje de programación interpretado orientado a la manipulación de datos textuales , tanto en forma de archivos como de flujo de datos provenientes de entrada estándar .

Tipos de variables

Es un lenguaje débilmente tipado , y cualquier variable se puede considerar como una cadena (se puede concatenar , se puede contar su número de caracteres, etc.), incluso si las variables numéricas se convierten a enteros o números de coma flotante cuando sea necesario, por ejemplo. ejemplo ejemplo en operaciones aritméticas. No existe un tipo booleano (es decir, variables con el valor trueo false), pero se puede utilizar cualquier variable como valor booleano: se considera el valor 0, la cadena vacía ( "") o una variable no inicializada false, mientras que cualquier otro valor es true.

Además de las variables escalares, AWK también admite matrices asociativas , es decir, matrices indexadas por cadenas de claves. Dado que cualquier escalar en AWK puede considerarse una cadena, también es posible definir matrices cuyas claves son enteros secuenciales, pero normalmente, a diferencia de muchos otros lenguajes de programación, esto no aporta ninguna ventaja en términos de rendimiento de acceso, porque AWK no lo hace. distinguir entre arreglos secuenciales y asociativos.

Por ejemplo, puede definir las dos matrices:

# matriz "secuencial" arr1 [ 0 ] = "a" arr1 [ 1 ] = "b" arr1 [ 2 ] = "c" # matriz usando cadenas como claves arr2 [ "foo" ] = 1 arr2 [ "bar" ] = 2

El acceso a los arreglos generalmente se realiza a través de la palabra clave in, que cicla sobre las claves del arreglo especificado, con orden indefinido:

for ( i in arr1 ) { print i # print "1", "2", ... de forma NO secuencial } for ( i in arr2 ) { print i # print "foo", "bar" (de forma no secuencial) -manera secuencial secuencial) }

En el caso de una matriz secuencial, es posible utilizar la sintaxis de estilo C :

for ( i = 0 ; i < longitud ( arr1 ); ++ i ) { print arr1 [ i ] }

para obtener acceso secuencial a los valores.

Finalmente, AWK admite expresiones regulares . Una expresión regular (expresión regular o regex ) se define entre dos barras , y es posible probar la coincidencia entre una expresión y esa expresión regular a través del operador de tilde:

# prueba si la variable "foo" comienza con un dígito: if ( foo ~ / ^ [0-9] / ) # ...

Estructura de un programa

Un programa AWK está estructurado de acuerdo con una secuencia de directivas como:

condiciones {acciones}

Si el script se suministra con uno o más archivos, o en general un flujo de datos (por ejemplo, a través de la entrada estándar ), este flujo se leerá línea por línea desde AWK; para cada línea, las instrucciones contenidas en el script se ejecutan secuencialmente. Para cada declaración, si su condición es verdadera para la fila actual, se realizan las acciones correspondientes a esa condición.

Por ejemplo, si a un programa AWK de este tipo:

# imprime solo líneas que consisten solo en letras minúsculas. / ^ [az] + $ / { imprimir $ 0 }

se proporciona entrada:

123 Foo plutón2

la acción print $0(que imprime la línea completa en la pantalla) se realizará solo para la segunda línea, mientras que las otras dos serán ignoradas.

Si se especifica una condición sin una acción relacionada, la acción predeterminada es simplemente "imprimir la línea completa", por lo que en el ejemplo anterior podríamos haber usado el código equivalente:

/ ^ [az] + $ /

Por el contrario, si se especifica una acción sin una condición relacionada, esa acción se realizará para todas las filas de entrada.

Condiciones especiales

Hay dos condiciones especiales: BEGIN y END. Una acción con una condición BEGIN siempre se ejecuta antes de que se procese cualquier entrada, mientras que una acción con una condición END siempre se ejecuta después de que se haya procesado toda la entrada.

Usos

AWK se puede usar como un filtro , fue una de las primeras herramientas en aparecer desde la versión 7 de Unix y se ganó la reputación de ser una forma de agregar capacidades computacionales a una canalización de Unix . El AWK ahora se incluye entre las aplicaciones estándar de cada versión reciente del sistema operativo Unix disponible en la actualidad. Sin embargo, existen implementaciones de AWK para casi todos los demás sistemas operativos.

Por lo general, AWK es un lenguaje interpretado , es decir, hay un archivo ejecutable llamado awk que lee desde la línea de comandos o desde un archivo el programa real escrito en lenguaje awk y lo aplica a uno o más archivos de entrada para producir un resultado.

Ejemplos

¡Hola Mundo!

# simplemente ejecute la declaración BEGIN y salga sin leer ninguna entrada BEGIN { print "¡Hola, mundo!" }

Notas

  1. ^ Michael Stutz, Comenzar con GAWK: Fundamentos del lenguaje AWK , en developerWorks , IBM , 19 de septiembre de 2006. Consultado el 23 de octubre de 2010 (archivado desde el original el 20 de mayo de 2011) .
    "[AWK] a menudo se denomina lenguaje basado en datos: las declaraciones del programa describen los datos de entrada para hacer coincidir y procesar en lugar de una secuencia de pasos del programa"

Otros proyectos

Enlaces externos