Loading AI tools
lenguaje de programación De Wikipedia, la enciclopedia libre
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 las iniciales de los apellidos de sus 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 | ||
---|---|---|
![]() | ||
![]() | ||
Alfred Aho, Brian Kernighan y Peter J. Weinberger bell labs | ||
Información general | ||
Paradigma | Programación dirigida por eventos, Programación imperativa | |
Apareció en | 1977, última revisión 1985, la versión POSIX actual es IEEE Std 1003.1-2004 | |
Diseñado por | Alfred Aho, Peter Weinberger, and Brian Kernighan | |
Sistema de tipos | débil, dinámico | |
Implementaciones | awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (compilador), Awka (compilador) | |
Dialectos | old awk oawk 1977, new awk nawk 1985, GNU Awk | |
Influido por | C, Bourne shell, SNOBOL | |
Ha influido a | Perl, Korn shell(ksh93, dtksh, tksh), JavaScript | |
Sistema operativo | Multiplataforma | |
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 las secuencias de órdenes 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 canalizaciones de Unix. La implementación de alguna versión del lenguaje AWK es estándar en casi todo sistema operativo tipo unix moderno. AWK figura 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.
Generalmente hablando, a AWK se le dan dos piezas de datos: un fichero de órdenes y un fichero primario de entrada. Un fichero de órdenes (que puede ser un fichero real, o puede ser incluido en la invocación de AWK desde la línea de órdenes) contiene una serie de órdenes que le dicen a AWK cómo procesar el fichero de entrada. El fichero primario de entrada es normalmente texto formateado de alguna manera; puede ser en un fichero real, o puede ser leído por AWK de la entrada estándar (teclado). Un programa AWK típico consiste en una serie de líneas, cada una de la forma
/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 de manera predeterminada. AWK mira a lo largo del fichero de entrada; cuando encuentra una línea que coincide con el "patrón", ejecuta la (s) orden (es) indicadas en "acción". Las formas alternativas incluyen:
Cada una de estas formas pueden incluirse varias veces en un archivo. El fichero se procesa de manera progresiva, de modo tal que, si hubiera dos declaraciones "BEGIN", sus contenidos se ejecutarán en orden de aparición. Las declaraciones "BEGIN" y "END" no necesitan estar en forma ordenada.
AWK fue creado como un sustituto para los algoritmos escritos en C para métodos de análisis de texto.
Las órdenes de AWK son las declaraciones sustituidas por acción en los ejemplos anteriores. Las órdenes de AWK pueden incluir llamadas a funciones, asignación de variables, cálculos, o cualquier combinación de estas. AWK contiene compatibilidad propia con muchas funciones; muchas otras las brindan las distintas versiones de AWK. Incluso algunas versiones admiten la inclusión de bibliotecas dinámicamente enlazadas, que pueden proveer aún más funciones.
Por claridad las llaves ({ }) se omitirán en los siguientes ejemplos.
La orden print se utiliza para imprimir texto. La forma más simple de esta orden es
print
Esto muestra el contenido de la línea actualmente procesada. En AWK las líneas se dividen en campos, y estos se pueden operar individualmente:
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, las órdenes print
y print $0
resultan similares.
La orden 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)
La salida puede ser enviada a un archivo:
print "expresión" > "nombre de archivo"
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.
De manera similar a C, la definición de funciones consiste en la clave function
, el nombre de la función, los argumentos de la función y el cuerpo de la misma, e.g.:
function:
function sumar_tres (numero, temporal) { # Los identificadores no contienen la letra ñ
temporal = numero + 3 # Tampoco pueden tener tildes
return temporal
}
Podemos invocar la función así:
print sumar_tres(36) # Imprime 39
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 sangrar las variables locales en la lista de argumentos para indicar dónde terminan los parámetros y dónde comienzan las variables locales.
Este es un programa «Hola mundo» muy simple escrito en AWK:
BEGIN { print "¡Hola, mundo!"; exit }
Imprime todos los renglones con más de 80 caracteres. Obsérvese que la acción predeterminada es imprimir la línea actual.
length > 80
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 }
Suma los valores de la primera columna de los datos ingresados.
{ s += $1 }
END { print s }
Este programa usa listas enlazadas para determinar la cantidad de veces que cada palabra aparece en el texto.
BEGIN { FS="[^a-zA-Z]+"}
{ for (i=1; i<=NF; i++)
words[tolower($i)]++
}
END { for (i in words)
print i, words[i]
}
Como cualquier otro lenguaje de programación, se pueden escribir programas AWK autocontenidos usando la sintaxis de líneas de Shebang.
Por ejemplo, una secuencia de órdenes UNIX llamada holamundo.awk que imprima el texto «¡Hola, mundo!» podría escribirse de la siguiente manera:
#!/usr/bin/awk -f
BEGIN { print "¡Hola, mundo!"; exit }
AWK fue escrito originalmente en 1977 con UNIX.
En 1985 los autores comienzan la expansión del lenguaje, añadiendo funciones definidas por el usuario. El lenguaje es descrito en el libro The AWK Programming Language, publicado en 1988. Para evitar confusiones con la versión anterior, a la que era incompatible, esta versión se conoce, a veces, como "nuevo AWK" o "nawk". Esta implementación fue publicada bajo una licencia de software libre en 1996, continúa siendo mantenida por Brian Wilson Kernighan.
Página de un proyecto libre basado en gawk. Este extiende las funcionalidades de gawk para permitirle el uso de librerías dinámicas.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.