AWK ye un llinguaxe de programación diseñáu pa procesar datos basaos en testu, yá seyan ficheros o fluxos de datos. El nome AWK deriva de les iniciales de los apellíos de los sos autores: Alfred Aho, Peter Weinberger, y Brian Kernighan. awk, cuando ta escritu tou en minúscules, fai referencia al programa d'Unix o Plan 9 qu'interpreta programes escritos nel llinguaxe de programación AWK.

Ficha de softwareAWK
Desendolcador(es) Alfred Aho, Brian Kernighan y Peter J. Weinberger (es) Traducir
Tipu de MIME text/x-awk application/x-awk
Versión inicial 1977
Última versión IEEE Std 1003.1-2008 (, )
Tipu utilidad estándar de Unix (es) Traducir, lenguaje de script (es) Traducir, programación por procedimientos (es) Traducir y programación dirigida por datos (es) Traducir
Orixe del nome Alfred Aho, Brian Kernighan y Peter J. Weinberger (es) Traducir
Códigu fonte Códigu fonte
Etiqueta de Stack Exchange Stack Exchange
Cambiar los datos en Wikidata

AWK ye exemplu d'un llinguaxe de programación qu'usa llargamente'l tipu de datos de llistes asociatives (esto ye, llistes indexadas por cadenes clave), y espresiones regulares. El poder, brevedá y llimitaciones de los programes d'AWK y los guiones de sei inspiraron a Larry Wall a escribir Perl. Por cuenta de la so trupa notación, toos estos llinguaxes son frecuentemente usaos pa escribir programes d'una llinia.

AWK foi una de les primeres ferramientes n'apaecer n'Unix (na versión 3) y ganó popularidá como una manera d'añader funcionalidad a les tuberíes d'Unix. La implementación de dalguna versión del llinguaxe AWK ye estándar en cuasi tou sistema operativu tipu unix modernu. AWK ye mentáu nes Single UNIX Specification (especificaciones básiques de unix) como una de les utilidaes necesaries de too sistema operativu Unix. Pueden instalase implementaciones d'AWK en cuasi tolos demás sistemes operativos.

Estructura de los programes AWK

editar

Xeneralmente falando, a AWK dánse-y dos pieces de datos: un ficheru d'órdenes y un ficheru primariu d'entrada. Un ficheru d'órdenes (que puede ser un ficheru real, o puede ser incluyíu na invocación d'AWK dende la llinia d'órdenes) contién una serie d'órdenes que-y dicen a AWK cómo procesar el ficheru d'entrada. El ficheru primariu d'entrada ye de normal testu formateado de dalguna manera; puede ser nun ficheru real, o puede ser lleíu por AWK de la entrada estándar (tecláu). Un programa AWK típicu consiste nuna serie de llinies, caúna de la forma

/patrón/ { aición }

onde patrón ye una espresión regular y aición ye una orde. La mayoría de les implementaciones d'AWK usen espresiones regulares estendíes por defectu. AWK mira a lo llargo del ficheru d'entrada; cuando atopa una llinia que coincide col "patrón", executa la (s) orde (ye) indicaes en "aición". Les formes alternatives inclúin:

BEGIN { aición }
Executa les órdenes aición al empiezu de la execución, antes de que los datos empiecen a ser procesaos.
END { aición }
Similar a la forma previa pero executa les órdenes aición dempués de que tolos datos seyan procesaos.
/patrón/
Imprime les llinies acordes al patrón.
{ aición }
Executa aición per cada llinia na entrada.

Caúna d'estes formes pueden ser incluyíes delles vegaes nun archivu. El ficheru ye procesáu de manera progresiva, entós si hubiera dos declaraciones "BEGIN", los sos conteníos van ser executaos n'orde d'apaición. Les declaraciones "BEGIN" y "END" non precisen tar en forma ordenada.

AWK foi creáu como un reemplazu a los algoritmos escritos en C pa métodos d'analises de testu.

Comandos d'AWK

editar

Los comandos d'AWK son les declaraciones sustituyíes por aición nos exemplos anteriores. Los comandos d'AWK pueden incluyir llamaes a funciones, asignación de variables, cálculos, o cualquier combinación d'estes. AWK contién soporte propiu pa munches funciones; munches otres son provistes poles distintes versiones d'AWK. Inclusive delles versiones soporten la inclusión de llibreríes dinámicamente enllazaes, que pueden aprovir entá más funciones.

Por claridá les llaves ({ }) van ser omitíes nos siguientes exemplos.

El comandu print

editar

El comandu print ye usáu pa imprimir testu. La forma más simple d'esti comandu ye

print

Esto amuesa'l conteníu de la llinia anguaño procesada. En AWK les llinies son estremaes en campos, y estos pueden ser operaos individualmente:

print $1
Amuesa'l primer campu de la llinia actual
print $1, $3
Amuesa'l primera y tercer campu de la llinia actual, dixebraos por una cadena predefinida, separador de campos de salida o OFS (poles sos sigles n'inglés), que'l so valor predefinido ye un calter d'espaciu (' ').

Anque esta sintaxis ($#) puede suxerir que se traten de variables (el símbolu $ ye indicador de variables n'otros llinguaxes), faen referencia a los campos de la llinia actual. Un casu especial, $0, referir a la llinia entera. Ello ye que los comandos "print" y "print $0" resulten similares.

El comandu print puede tamién imprimir la resultancia de cálculos o funciones invocaes:

print 3+2
print foobar(3)
print foobar (variable)
print ensin(3-2)

La salida puede ser unviada a un archivu:

print "espresión" > "nome d'archivu"

Variables

editar

Los nomes de variables pueden usar cualquier combinación de los calteres [A-Za-z0-9_], cola única esceición de les pallabres clave del llinguaxe. Los operadores + - * / son suma, resta, multiplicación y división respeutivamente. Pa la concatenación, basta con asitiar dos variables (o cadena constante) xunto a cualesquier otra, opcionalmente con un espaciu entemediu. Les cadenes son delimitadas por comines dobles. Nun ye necesariu rematar les órdenes con puntu y coma. Pueden añader comentarios del programa usando # como primer calter nuna llinia.

Funciones definíes pol usuariu

editar

De manera similar a C, la definición de funciones consiste na clave function, el nome de la función, los argumentos de la función y el cuerpu de la mesma, e.g.:

function:

 function sumar_trés (numbero, temporal) { # Los identificadores nun contienen la lletra ñ
 temporal = numbero + 3 # Tampoco pueden tener tildes
 return temporal
 }

Podemos invocar la función asina:

print sumar_trés(36) # Imprime 39

Les funciones pueden tener variables definíes llocalmente. Los nomes d'estes son añadíos a la fin de la llista d'argumentos, anque los valores d'estes tienen de ser omitíos al llamar la función. Ye conveniente indentar les variables llocales na llista d'argumentos pa indicar ónde terminen los parámetros y ónde empiecen les variables locales.

Exemplos

editar

Hello World

editar

Esti ye un programa "Hola mundu" bien simple escritu en AWK:

 BEGIN { print "Hola mundu!"; exit }

Imprimir llinies mayores a 80 calteres

editar

Imprime toles llinies con más de 80 calteres. Nótese que l'aición por defectu ye imprimir la llinia actual.

 length > 80

Contador de pallabres

editar

Cunta les pallabres na entrada y amuesa la cantidá de llinies, pallabres y calteres.

 { w += NF; c += length}
 END { print NR, w, c }

Total de la primer columna

editar

Suma los valores de la primer columna de los datos ingresaos.

 { s += $1 }
 END { print s }

Frecuencia de pallabres

editar

Esti programa usa llistes enllazaes pa determinar la cantidá de vegaes que cada pallabra apaez nel testu.

 BEGIN { FS="[^a-zA-Z]+"}
 
 { for (i=1; i<=NF; i++)
 words[tolower($i)]++
 }
 
 END { for (i in words)
 print i, words[i]
 }

Programes autocontenidos

editar

Como cualesquier otru llinguaxe de programación, pueden escribise programes AWK autocontenidos usando la sintaxis de llinies de Shebang.

Por casu, un comandu UNIX llamáu holamundo.awk qu'imprima'l testu "Hola mundu!" podría ser escritu de la siguiente manera:

 #!/usr/bin/awk -f
 BEGIN { print "Hello, world!"; exit }

AWK, versiones y implementaciones

editar

AWK foi escritu orixinalmente en 1977 con UNIX.

En 1985 los autores empiecen la espansión del llinguaxe, añadiendo funciones definíes pol usuariu. El llinguaxe ye descritu nel llibru The AWK Programming Language, publicáu en 1988. Pa evitar tracamundios cola versión anterior, a la que yera incompatible, esta versión conozse, dacuando, como "nuevu AWK" o "nawk". Esta implementación foi publicada so una llicencia de software llibre en 1996, sigue siendo caltenida por Brian Wilson Kernighan.

GNU awk, o gawk, ye otra implementación llibre. Foi escrita primero que la implementación orixinal fuera publicada, y ye llargamente utilizada. Cuasi toles distribución linux inclúin una versión actualizada de gawk y gawk ye reconocíu como la implementación estándar nel mundu linux. La versión 30 de GAWK foi incluyida como awk na versión 5.0 de FreeBSD. Les versiones posteriores de BSD incluyeron nawk pa evitar l'usu de les GPL, unes llicencies de software llibre más restrictives que les BSD nel sentíu de qu'un programa publicáu so la llicencia GPL nun puede ser modificáu pa convertise en propietariu protexendo d'esta forma la llibertá del códigu fonte.

Páxina d'un proyeutu llibre basáu en gawk. Este estiende les funcionalidades de gawk pa dexa-y l'usu de llibreríes dinámiques.

  • mawk ye una implementación AWK optimizada pa la velocidá, escrita por Mike Brennan y basada nun intérprete bytecode.
  • Jawk ye un proyeutu qu'implementa AWK en Java. Añadir estensiones pal llinguaxe p'aprovir accesu a carauterístiques de Java dientro de los programes AWK (e.g., Java threads, sockets, Collections, etc).

Digresión

editar
  • L'ave, emblema d'AWK (a.o na cubierta del llibru The AWK Programing Language ye l'Alca).

Llibros

editar

Ver tamién

editar

Referencies

editar

Enllaces esternos

editar

Implementaciones

editar