Lenguaje de programación AWK | |
---|---|
Ejemplo de uso deawk | |
Autor | Alfred Aho , Peter Weinberger y Brian Kernighan |
Fecha de origen | 1977 |
Ultima versión | Estándar IEEE 1003.1-2008 (POSIX) / 1985 |
Uso | puede manipular cadenas, enteros y decimales, expresiones regulares |
Paradigmas | secuencias de comandos , procedimental , basado en datos [1] |
Mecanografía | Débil |
Influenciado por | C , SNOBOL 4, carcasa Bourne |
Influyó | Tcl , AMPL , Perl , shell Korn ( ksh93 , dtksh , tksh ), Lua |
Implementación de referencia | |
Implementación | awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (compilador), Awka (compilador) |
Sistema operativo | Multiplataforma |
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 .
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" ] = 2El 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] / ) # ...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ón2la 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.
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.
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.