fbpx
Wikipedia

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 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.

Estructura de los programas AWK

 

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:

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 }
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 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.

Órdenes de AWK

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

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:

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, 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" 

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.

Funciones definidas por el usuario

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.

Ejemplos

Hello World

Este es un programa «Hola mundo» muy simple escrito en AWK:

 BEGIN { print "¡Hola, mundo!"; exit } 

Imprimir líneas mayores a 80 caracteres

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 

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 } 

Total de la primera columna

Suma los valores de la primera columna de los datos ingresados.

 { 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]+"} { for (i=1; i<=NF; i++) words[tolower($i)]++ } END { for (i in words) print i, words[i] } 

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, 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, versiones e implementaciones

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.

GNU awk, o gawk, es otra implementación libre. Fue escrita antes de que la implementación original fuera publicada, y es ampliamente utilizada. Casi todas las distribución linux incluyen una versión actualizada de gawk y gawk es reconocido como la implementación estándar en el mundo linux. La versión 30 de GAWK fue incluida como awk en la versión 5.0 de FreeBSD. Las versiones posteriores de BSD incluyeron nawk para evitar el uso de las GPL, unas licencias de software libre más restrictivas que las BSD en el sentido de que un programa publicado bajo la licencia GPL no puede ser modificado para convertirse en propietario protegiendo de esta forma la libertad del código fuente.

    Página de un proyecto libre basado en gawk. Este extiende las funcionalidades de gawk para permitirle el uso de librerías dinámicas.

    • 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 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). . Addison-Wesley. ISBN 0-201-07981-X. Archivado desde el original el 20 de abril de 2006.  The book's webpage includes downloads of the current implementation of Awk and links to others.
    • Arnold Robbins. Effective awk Programming (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 (Edition 3 edición). 
    • Dale Dougherty, Arnold Robbins (March 1997). sed & awk, Second Edition (Second Edition edición). O'Reilly Media. ISBN 1-56592-225-5. 

    Véase también

    Enlaces externos

    • maintained by Brian Kernighan.
    • comp.lang.awk is a USENET newsgroup dedicated to AWK.

    Implementaciones

    • GAWK (GNU awk) webpage
    • GAWK for Windows (de proyecto GNU32win sourceforge)
    • 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ódulo Perl en CPAN para programar en Awk dentro de Perl (en inglés)
    •   Datos: Q213970
    •   Multimedia: AWK

    lenguaje, programación, diseñado, para, procesar, datos, basados, texto, sean, ficheros, flujos, datos, nombre, deriva, iniciales, apellidos, autores, alfred, peter, weinberger, brian, kernighan, cuando, está, escrito, todo, minúsculas, hace, referencia, progr. AWK es un lenguaje de programacion disenado 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 esta escrito todo en minusculas hace referencia al programa de Unix o Plan 9 que interpreta programas escritos en el lenguaje de programacion AWK AWKAlfred Aho Brian Kernighan y Peter J Weinbergerbell labsInformacion generalParadigmaProgramacion dirigida por eventos Programacion imperativaAparecio en1977 ultima revision 1985 la version POSIX actual es IEEE Std 1003 1 2004Disenado porAlfred Aho Peter Weinberger and Brian KernighanSistema de tiposdebil dinamicoImplementacionesawk GNU Awk mawk nawk MKS AWK Thompson AWK compilador Awka compilador Dialectosold awk oawk 1977 new awk nawk 1985 GNU AwkInfluido porC Bourne shell SNOBOLHa influido aPerl Korn shell ksh93 dtksh tksh JavaScriptSistema operativoMultiplataforma editar datos en Wikidata AWK es ejemplo de un lenguaje de programacion 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 ordenes de sed inspiraron a Larry Wall a escribir Perl Debido a su densa notacion todos estos lenguajes son frecuentemente usados para escribir programas de una linea AWK fue una de las primeras herramientas en aparecer en Unix en la version 3 y gano popularidad como una manera de anadir funcionalidad a las canalizaciones de Unix La implementacion de alguna version del lenguaje AWK es estandar en casi todo sistema operativo tipo unix moderno AWK figura en las Single UNIX Specification especificaciones basicas de unix como una de las utilidades necesarias de todo sistema operativo Unix Se pueden instalar implementaciones de AWK en casi todos los demas sistemas operativos Indice 1 Estructura de los programas AWK 2 ordenes de AWK 2 1 La orden print 2 2 Variables 2 3 Funciones definidas por el usuario 3 Ejemplos 3 1 Hello World 3 2 Imprimir lineas mayores a 80 caracteres 3 3 Contador de palabras 3 4 Total de la primera columna 3 5 Frecuencia de palabras 4 Programas autocontenidos 5 AWK versiones e implementaciones 6 Digresion 7 Libros 8 Vease tambien 9 Enlaces externos 9 1 ImplementacionesEstructura de los programas AWK Editar Generalmente hablando a AWK se le dan dos piezas de datos un fichero de ordenes y un fichero primario de entrada Un fichero de ordenes que puede ser un fichero real o puede ser incluido en la invocacion de AWK desde la linea de ordenes contiene una serie de ordenes que le dicen a AWK como 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 leido por AWK de la entrada estandar teclado Un programa AWK tipico consiste en una serie de lineas cada una de la forma patron accion donde patron es una expresion regular y accion es una orden La mayoria de las implementaciones de AWK usan expresiones regulares extendidas de manera predeterminada AWK mira a lo largo del fichero de entrada cuando encuentra una linea que coincide con el patron ejecuta la s orden es indicadas en accion Las formas alternativas incluyen BEGIN accion Ejecuta las ordenes accion al comienzo de la ejecucion antes de que los datos comiencen a ser procesados END accion Similar a la forma previa pero ejecuta las ordenes accion despues de que todos los datos sean procesados patron Imprime las lineas acordes al patron accion Ejecuta accion por cada linea en la entrada 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 ejecutaran en orden de aparicion Las declaraciones BEGIN y END no necesitan estar en forma ordenada AWK fue creado como un sustituto para los algoritmos escritos en C para metodos de analisis de texto ordenes de AWK EditarLas ordenes de AWK son las declaraciones sustituidas por accion en los ejemplos anteriores Las ordenes de AWK pueden incluir llamadas a funciones asignacion de variables calculos o cualquier combinacion de estas AWK contiene compatibilidad propia con muchas funciones muchas otras las brindan las distintas versiones de AWK Incluso algunas versiones admiten la inclusion de bibliotecas dinamicamente enlazadas que pueden proveer aun mas funciones Por claridad las llaves se omitiran en los siguientes ejemplos La orden print Editar La orden print se utiliza para imprimir texto La forma mas simple de esta orden es print Esto muestra el contenido de la linea actualmente procesada En AWK las lineas se dividen en campos y estos se pueden operar individualmente print 1 Muestra el primer campo de la linea actual print 1 3 Muestra el primer y tercer campo de la linea actual separados por una cadena predefinida separador de campos de salida o OFS por sus siglas en ingles cuyo valor predefinido es un caracter de espacio Aunque esta sintaxis puede sugerir que se traten de variables el simbolo es indicador de variables en otros lenguajes hacen referencia a los campos de la linea actual Un caso especial 0 se refiere a la linea entera De hecho las ordenes print y print 0 resultan similares La orden print puede tambien imprimir el resultado de calculos 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 expresion gt nombre de archivo Variables Editar Los nombres de variables pueden usar cualquier combinacion de los caracteres A Za z0 9 con la unica excepcion de las palabras clave del lenguaje Los operadores son suma resta multiplicacion y division respectivamente Para la concatenacion 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 ordenes con punto y coma Se pueden anadir comentarios del programa usando como primer caracter en una linea Funciones definidas por el usuario Editar De manera similar a C la definicion de funciones consiste en la clave function el nombre de la funcion los argumentos de la funcion y el cuerpo de la misma e g function function sumar tres numero temporal Los identificadores no contienen la letra n temporal numero 3 Tampoco pueden tener tildes return temporal Podemos invocar la funcion asi print sumar tres 36 Imprime 39 Las funciones pueden tener variables definidas localmente Los nombres de estas son anadidos al final de la lista de argumentos aunque los valores de estas deben ser omitidos al llamar la funcion Es conveniente sangrar las variables locales en la lista de argumentos para indicar donde terminan los parametros y donde comienzan las variables locales Ejemplos EditarHello World Editar Este es un programa Hola mundo muy simple escrito en AWK BEGIN print Hola mundo exit Imprimir lineas mayores a 80 caracteres Editar Imprime todos los renglones con mas de 80 caracteres Observese que la accion predeterminada es imprimir la linea actual length gt 80 Contador de palabras Editar Cuenta las palabras en la entrada y muestra la cantidad de lineas palabras y caracteres w NF c length END print NR w c Total de la primera columna Editar Suma los valores de la primera columna de los datos ingresados s 1 END print s Frecuencia de palabras Editar 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 lt NF i words tolower i END for i in words print i words i Programas autocontenidos EditarComo cualquier otro lenguaje de programacion se pueden escribir programas AWK autocontenidos usando la sintaxis de lineas de Shebang Por ejemplo una secuencia de ordenes UNIX llamada holamundo awk que imprima el texto Hola mundo podria escribirse de la siguiente manera usr bin awk f BEGIN print Hola mundo exit AWK versiones e implementaciones EditarAWK fue escrito originalmente en 1977 con UNIX En 1985 los autores comienzan la expansion del lenguaje anadiendo funciones definidas por el usuario El lenguaje es descrito en el libro The AWK Programming Language publicado en 1988 Para evitar confusiones con la version anterior a la que era incompatible esta version se conoce a veces como nuevo AWK o nawk Esta implementacion fue publicada bajo una licencia de software libre en 1996 continua siendo mantenida por Brian Wilson Kernighan GNU awk o gawk es otra implementacion libre Fue escrita antes de que la implementacion original fuera publicada y es ampliamente utilizada Casi todas las distribucion linux incluyen una version actualizada de gawk y gawk es reconocido como la implementacion estandar en el mundo linux La version 30 de GAWK fue incluida como awk en la version 5 0 de FreeBSD Las versiones posteriores de BSD incluyeron nawk para evitar el uso de las GPL unas licencias de software libre mas restrictivas que las BSD en el sentido de que un programa publicado bajo la licencia GPL no puede ser modificado para convertirse en propietario protegiendo de esta forma la libertad del codigo fuente xgawkPagina de un proyecto libre basado en gawk Este extiende las funcionalidades de gawk para permitirle el uso de librerias dinamicas mawk es una implementacion AWK optimizada para la velocidad escrita por Mike Brennan y basada en un interprete bytecode Thompson AWK o TAWK es un compilador AWK para DOS y Windows previamente vendido por Thompson Automation Software Jawk es un proyecto que implementa AWK en Java Se anaden extensiones para el lenguaje para proveer acceso a caracteristicas de Java dentro de los programas AWK e g Java threads sockets Collections etc Digresion EditarEl ave emblema de AWK a o en la cubierta del libro The AWK Programing Language es el Alca Libros EditarAlfred V Aho Brian W Kernighan and Peter J Weinberger 1988 The AWK Programming Language Addison Wesley ISBN 0 201 07981 X Archivado desde el original el 20 de abril de 2006 The book s webpage includes downloads of the current implementation of Awk and links to others Arnold Robbins Effective awk Programming Edition 3 edicion 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 edicion Dale Dougherty Arnold Robbins March 1997 sed amp awk Second Edition Second Edition edicion O Reilly Media ISBN 1 56592 225 5 Vease tambien Editarsed Lista de programas para UnixEnlaces externos Editarawk maintained by Brian Kernighan comp lang awk is a USENET newsgroup dedicated to AWK gnulamp awk tutorialImplementaciones Editar GAWK GNU awk webpage GAWK for Windows de proyecto 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 modulo Perl en CPAN para programar en Awk dentro de Perl en ingles Datos Q213970 Multimedia AWK Obtenido de https es wikipedia org w index php title AWK amp oldid 138001996, wikipedia, wiki, leyendo, leer, libro, biblioteca,

    español

    , española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos