AWK
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.
Desendolcador(es) | Alfred Aho, Brian Kernighan y Peter J. Weinberger (es) |
---|---|
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) , lenguaje de script (es) , programación por procedimientos (es) y programación dirigida por datos (es) |
Orixe del nome | Alfred Aho, Brian Kernighan y Peter J. Weinberger (es) |
Códigu fonte | Códigu fonte |
Etiqueta de Stack Exchange | Stack Exchange |
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
editarXeneralmente 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
editarLos 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
editarEl 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
editarLos 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
editarDe 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
editarHello World
editarEsti ye un programa "Hola mundu" bien simple escritu en AWK:
BEGIN { print "Hola mundu!"; exit }
Imprimir llinies mayores a 80 calteres
editarImprime 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
editarCunta 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
editarSuma los valores de la primer columna de los datos ingresaos.
{ s += $1 }
END { print s }
Frecuencia de pallabres
editarEsti 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
editarComo 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
editarAWK 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.
- Thompson AWK o TAWK ye un compilador AWK para DOS y Windows, primeramente vendíu por Thompson Automation Software.
Digresión
editar- L'ave, emblema d'AWK (a.o na cubierta del llibru The AWK Programing Language ye l'Alca).
Llibros
editar- Alfred V. Aho, Brian W. Kernighan, and Peter J. Weinberger (1988). The AWK Programming Language. Addison-Wesley. ISBN 0-201-07981-X. The book's webpage includes downloads of the current implementation of Awk and links to others.
- Arnold Robbins. Effective awk Programming, Edition 3. Arnold Robbins maintains the GNU Awk implementation of AWK for more than 10 years. The free GNU Awk manual was also published by O'Reilly in May 2001. Free download of this manual is possible through the following book references.
- Arnold Robbins. GAWK: Effective AWK Programming: A User's Guide for GNU Awk, Edition 3.
- Dale Dougherty, Arnold Robbins (March 1997). sei & awk, Second Edition, Second Edition, O'Reilly Media. ISBN 1-56592-225-5.
Ver tamién
editarReferencies
editarEnllaces esternos
editar- awk maintained by Brian Kernighan.
- comp.lang.awk is a USENET newsgroup dedicated to AWK.
- gnulamp awk tutorial
Implementaciones
editar- GAWK (GNU awk) webpage
- GAWK for Windows (de proyeutu GNU32win sourceforge)
- MAWK (Mike's AWK)
- DJGPP port of Gawk 3.11b as a downloadable 768KB zipfile
- xgawk download site
- Awka Open Source, AWK to C Conversion Tool
- TAWK Compiler (descatalogado)
- Jawk Open Source, an implementation of AWK in Java with extensions
- Inline::Awk módulu Perl en CPAN pa programar en Awk dientro de Perl (n'inglés)