Professional Documents
Culture Documents
AWK
AWK
Implementaciones: awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (compilador), Awka (compilador)
Dialectos: old awk oawk 1977, new awk nawk 1985, GNU Awk
AWK es un lenguaje de programación diseñado para procesar datos basados en texto, ya sean ficheros o flujos de
datos. El nombre AWK deriva de los apellidos de los autores: Alfred Aho, Peter Weinberger, y Brian Kernighan.
awk, cuando está escrito todo en minúsculas, hace referencia al programa de Unix o Plan 9 que interpreta programas
escritos en el lenguaje de programación AWK.
AWK es ejemplo de un lenguaje de programación que usa ampliamente el tipo de datos de listas asociativas (es
decir, listas indexadas por cadenas clave), y expresiones regulares. El poder, brevedad y limitaciones de los
programas de AWK y los guiones de sed inspiraron a Larry Wall a escribir Perl. Debido a su densa notación, todos
estos lenguajes son frecuentemente usados para escribir programas de una línea.
AWK fue una de las primeras herramientas en aparecer en Unix (en la versión 3) y ganó popularidad como una
manera de añadir funcionalidad a las tuberías de Unix. La implementación de alguna versión del lenguaje AWK es
estándar en casi todo sistema operativo tipo unix moderno. AWK es mencionado en las Single UNIX Specification
(especificaciones básicas de unix) como una de las utilidades necesarias de todo sistema operativo Unix. Se pueden
instalar implementaciones de AWK en casi todos los demás sistemas operativos.
/patrón/ { acción }
donde patrón es una expresión regular y acción es una orden. La mayoría de las implementaciones de AWK usan
expresiones regulares extendidas por defecto. AWK mira a lo largo del fichero de entrada; cuando encuentra una
línea que coincide con el "patrón", ejecuta la (s) órdenes (s) indicadas en "acción". Las formas alternativas incluyen:
BEGIN { acción }
Ejecuta las órdenes acción al comienzo de la ejecución, antes de que los datos comiencen a ser procesados.
END { acción }
AWK 2
Similar a la forma previa pero ejecuta las órdenes acción después de que todos los datos sean procesados.
/patrón/
Imprime las líneas acordes al patrón.
{ acción }
Ejecuta acción por cada línea en la entrada.
Cada una de estas formas pueden ser incluidas varias veces en un archivo. El fichero es procesado de manera
progresiva, entonces si hubiera dos declaraciones "BEGIN", sus contenidos serán ejecutados en orden de aparición.
Las declaraciones "BEGIN" y "END" no necesitan estar en forma ordenada.
AWK fue creado como un reemplazo a los algoritmos escritos en C para métodos de análisis de texto.
Comandos de AWK
Los comandos de AWK son las declaraciones sustituidas por acción en los ejemplos anteriores. Los comandos de
AWK pueden incluir llamadas a funciones, asignación de variables, cálculos, o cualquier combinación de estas.
AWK contiene soporte propio para muchas funciones; muchas otras son provistas por las distintas versiones de
AWK. Incluso algunas versiones soportan la inclusión de librerías dinámicamente enlazadas, que pueden proveer
aún más funciones.
Por claridad los corchetes ( { } ) serán omitidos en los siguientes ejemplos.
El comando print
El comando print es usado para imprimir texto. La forma más simple de este comando es
Esto muestra el contenido de la línea actualmente procesada. En AWK las líneas son divididas en campos, y estos
pueden ser operados individualmente:
print $1
Muestra el primer campo de la línea actual
print $1, $3
Muestra el primer y tercer campo de la línea actual, separados por una cadena predefinida, separador de
campos de salida o OFS (por sus siglas en inglés), cuyo valor predefinido es un carácter de espacio (' ').
Aunque esta sintaxis ($#) puede sugerir que se traten de variables (el símbolo $ es indicador de variables en otros
lenguajes), hacen referencia a los campos de la línea actual. Un caso especial, $0, se refiere a la línea entera. De
hecho, los comandos "print" y "print $0" resultan similares.
El comando print puede también imprimir el resultado de cálculos o funciones invocadas:
print 3+2
print foobar(3)
print foobar (variable)
print sin(3-2)
Variables
Los nombres de variables pueden usar cualquier combinación de los caracteres [A-Za-z0-9_], con la única excepción
de las palabras clave del lenguaje. Los operadores + - * / son suma, resta, multiplicación y división respectivamente.
Para la concatenación, basta con colocar dos variables (o cadena constante) junto a cualquier otra, opcionalmente con
un espacio intermedio. Las cadenas son delimitadas por comillas dobles. No es necesario finalizar las órdenes con
punto y coma. Se pueden añadir comentarios del programa usando # como primer carácter en una línea.
Las funciones pueden tener variables definidas localmente. Los nombres de estas son añadidos al final de la lista de
argumentos, aunque los valores de estas deben ser omitidos al llamar la función. Es conveniente indentar las
variables locales en la lista de argumentos para indicar dónde terminan los parámetros y dónde comienzan las
variables locales.
Ejemplos
Hello World
Este es un programa "Hola mundo" muy simple escrito en AWK:
length > 80
Contador de palabras
Cuenta las palabras en la entrada y muestra la cantidad de líneas, palabras y caracteres.
{ w += NF; c += length}
END { print NR, w, c }
AWK 4
{ s += $1 }
END { print s }
Frecuencia de palabras
Este programa usa listas enlazadas para determinar la cantidad de veces que cada palabra aparece en el texto.
BEGIN { FS="[^a-zA-Z]+"}
Programas autocontenidos
Como cualquier otro lenguaje de programación, se pueden escribir programas AWK autocontenidos usando la
sintaxis de líneas de Shebang.
Por ejemplo, un comando UNIX llamado holamundo.awk que imprima el texto "Hola mundo!" podría ser escrito
de la siguiente manera:
#!/usr/bin/awk -f
BEGIN { print "Hello, world!"; exit }
• mawk es una implementación AWK optimizada para la velocidad, escrita por Mike Brennan y basada en un
intérprete bytecode.
• Thompson AWK o TAWK es un compilador AWK para DOS y Windows, previamente vendido por Thompson
Automation Software.
• Jawk [3] es un proyecto que implementa AWK en Java. Se añaden extensiones para el lenguaje para proveer
acceso a características de Java dentro de los programas AWK (e.g., Java threads, sockets, Collections, etc).
Digresión
• El ave, emblema de AWK (a.o en la cubierta del libro The AWK Programing Language es el Alca).
Libros
• Alfred V. Aho, Brian W. Kernighan, and Peter J. Weinberger (1988). The AWK Programming Language [4].
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 [5] (Edition 3 edición). 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 [6] (Edition 3 edición).
• Dale Dougherty, Arnold Robbins (March 1997). sed & awk, Second Edition [7] (Second Edition edición). O'Reilly
Media. ISBN 1-56592-225-5.
Véase también
• sed
• Lista de programas para Unix
Enlaces externos
• awk [8] maintained by Brian Kernighan.
• [news:comp.lang.awk comp.lang.awk] is a USENET newsgroup dedicated to AWK.
• gnulamp awk tutorial [9]
Implementaciones
• GAWK (GNU awk) webpage [10]
• mawk download site [11]
• DJGPP port of Gawk 3.11b as a downloadable 768KB zipfile [12]
• xgawk download site [2]
• Awka Open Source, AWK to C Conversion Tool [13]
• TAWK Compiler [14]
• Jawk Open Source, an implementation of AWK in Java with extensions [3]
• Inline::Awk [15] módulo Perl en CPAN para programar en Awk dentro de Perl (en inglés)
AWK 6
Referencias
[1] http:/ / www. opengroup. org/ onlinepubs/ 000095399/ utilities/ awk. html
[2] http:/ / sourceforge. net/ projects/ xmlgawk/
[3] http:/ / sourceforge. net/ projects/ jawk/
[4] http:/ / cm. bell-labs. com/ cm/ cs/ awkbook/
[5] http:/ / www. oreilly. com/ catalog/ awkprog3/ index. html
[6] http:/ / www. gnu. org/ software/ gawk/ manual/ html_node/ index. html
[7] http:/ / www. oreilly. com/ catalog/ sed2/
[8] http:/ / cm. bell-labs. com/ cm/ cs/ awkbook/ index. html
[9] http:/ / www. gnulamp. com/ awk. html
[10] http:/ / www. gnu. org/ software/ gawk/ gawk. html
[11] http:/ / freshmeat. net/ projects/ mawk/
[12] http:/ / clio. rice. edu/ djgpp/ win2k/ gwk311b. zip
[13] http:/ / awka. sourceforge. net/
[14] http:/ / www. tasoft. com/ tawk. html
[15] http:/ / search. cpan. org/ perldoc?Inline::Awk
Fuentes y contribuyentes del artículo 7
Licencia
Creative Commons Attribution-Share Alike 3.0 Unported
http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/