De Wikipedia, la enciclopedia libre
  (Redirigido desde el lenguaje de programación AWK )
Saltar a navegación Saltar a búsqueda

AWK ( awk ) [4] es un lenguaje de dominio específico diseñado para el procesamiento de texto y normalmente se utiliza como herramienta de extracción de datos y generación de informes. Como sed y grep , es un filtro , [4] y es una característica estándar de la mayoría de los sistemas operativos similares a Unix .

El lenguaje AWK es un lenguaje de secuencias de comandos basado en datos que consta de un conjunto de acciones que se deben tomar contra flujos de datos textuales, ya sea que se ejecuten directamente en archivos o se utilicen como parte de una canalización , con el fin de extraer o transformar texto, como producir formato informes. El lenguaje utiliza ampliamente el tipo de datos de cadena , matrices asociativas (es decir, matrices indexadas por cadenas de claves) y expresiones regulares . Si bien AWK tiene un dominio de aplicación previsto limitado y fue especialmente diseñado para admitir programas de una sola línea , el lenguaje es Turing-complete , e incluso los primeros usuarios de AWK de Bell Labs a menudo escribían grandes programas de AWK bien estructurados. [5]

AWK fue creado en Bell Labs en la década de 1970, [6] [se necesita una mejor fuente ] y su nombre se deriva de los apellidos de sus autores: Alfred Aho , Peter Weinberger y Brian Kernighan . El acrónimo se pronuncia igual que el pájaro auk , que está en la portada de The AWK Programming Language . [7] Cuando se escribe en minúsculas awk, se refiere al programa Unix o Plan 9 que ejecuta scripts escritos en el lenguaje de programación AWK.

Historia [ editar ]

AWK fue desarrollado inicialmente en 1977 por Alfred Aho (autor de egrep ), Peter J. Weinberger (quien trabajó en pequeñas bases de datos relacionales) y Brian Kernighan ; toma su nombre de sus respectivas iniciales. Según Kernighan, uno de los objetivos de AWK era tener una herramienta que manipulara fácilmente tanto números como cadenas. AWK también se inspiró en el lenguaje de programación de Marc Rochkind que se utilizó para buscar patrones en los datos de entrada y se implementó utilizando yacc . [8]

Como una de las primeras herramientas que apareció en la versión 7 de Unix , AWK agregó características computacionales a una canalización de Unix además del shell Bourne , el único lenguaje de programación disponible en un entorno Unix estándar. Es una de las utilidades obligatorias de la Especificación Única de UNIX , [9] y es requerida por la especificación Base Estándar de Linux . [10]

AWK se revisó y expandió significativamente en 1985-88, lo que resultó en la implementación de GNU AWK escrita por Paul Rubin , Jay Fenlason y Richard Stallman , lanzada en 1988. [11] GNU AWK puede ser la versión más ampliamente implementada [12] porque se incluye con los paquetes de Linux basados ​​en GNU. GNU AWK ha sido mantenido únicamente por Arnold Robbins desde 1994. [11] La fuente nawk (New AWK) de Brian Kernighan se publicó por primera vez en 1993 sin publicar, y públicamente desde finales de la década de 1990; muchos sistemas BSD lo utilizan para evitar la licencia GPL. [11]

AWK fue precedido por sed (1974). Ambos fueron diseñados para procesamiento de texto. Comparten el paradigma orientado a líneas y controlado por datos, y son particularmente adecuados para escribir programas de una sola línea , debido al bucle principal implícito y las variables de línea actuales. El poder y la concisión de los primeros programas AWK, en particular el poderoso manejo de expresiones regulares y la concisión debido a las variables implícitas, que facilitan las frases ingeniosas, junto con las limitaciones de AWK en ese momento, fueron inspiraciones importantes para el lenguaje Perl (1987). En la década de 1990, Perl se hizo muy popular, compitiendo con AWK en el nicho de los lenguajes de procesamiento de texto Unix.

Estructura de los programas AWK [ editar ]

AWK lee la entrada una línea a la vez. Se escanea una línea para cada patrón en el programa, y ​​para cada patrón que coincide, se ejecuta la acción asociada.

-  Alfred V. Aho [13]

Un programa AWK es una serie de pares de acciones de patrones, escritos como:

condición  {  acción  } condición  {  acción  } ...

donde condición es típicamente una expresión y acción es una serie de comandos. La entrada se divide en registros, donde, de forma predeterminada, los registros están separados por caracteres de nueva línea para que la entrada se divida en líneas. El programa prueba cada registro contra cada una de las condiciones y ejecuta la acción para cada expresión que sea verdadera. Se puede omitir la condición o la acción. La condición predeterminada coincide con todos los registros. La acción predeterminada es imprimir el registro. Esta es la misma estructura de patrón-acción que sed.

Además de una expresión AWK simple, como foo == 1o /^foo/, la condición puede ser BEGINo ENDhacer que la acción se ejecute antes o después de que se hayan leído todos los registros, o patrón1, patrón2 que coincide con el rango de registros que comienzan con un registro que coincide con patrón1 hasta para incluir el registro que coincide con el patrón2 antes de volver a intentarlo con el patrón1 en líneas futuras.

Además de los operadores lógicos y aritméticos normales, las expresiones AWK incluyen el operador de tilde ~, que hace coincidir una expresión regular con una cadena. Como útil azúcar sintáctico , / regexp / sin usar el operador de tilde coincide con el registro actual; esta sintaxis se deriva de sed , que a su vez la heredó del editor ed , donde /se utiliza para realizar búsquedas. Esta sintaxis de usar barras inclinadas como delimitadores de expresiones regulares fue posteriormente adoptada por Perl y ECMAScript , y ahora es común. Perl también adoptó el operador de tilde.

Comandos [ editar ]

Los comandos AWK son las declaraciones que sustituyen a la acción en los ejemplos anteriores. Los comandos AWK pueden incluir llamadas a funciones, asignaciones de variables, cálculos o cualquier combinación de los mismos. AWK contiene soporte integrado para muchas funciones; muchos más son proporcionados por los diversos sabores de AWK. Además, algunos sabores admiten la inclusión de bibliotecas vinculadas dinámicamente , que también pueden proporcionar más funciones.

El comando de impresión [ editar ]

El comando de impresión se utiliza para generar texto. El texto de salida siempre termina con una cadena predefinida denominada separador de registros de salida (ORS) cuyo valor predeterminado es una nueva línea. La forma más simple de este comando es:

print
Esto muestra el contenido del registro actual. En AWK, los registros se dividen en campos y estos se pueden mostrar por separado:
print $1
Muestra el primer campo del registro actual
print $1, $3
Muestra el primer y tercer campo del registro actual, separados por una cadena predefinida llamada separador de campo de salida (OFS), cuyo valor predeterminado es un carácter de espacio único.

Aunque estos campos ( $ X ) pueden tener semejanza con variables (el símbolo $ indica variables en Perl ), en realidad se refieren a los campos del registro actual. Un caso especial, $ 0 , se refiere a todo el registro. De hecho, los comandos " print" y " print $0" son idénticos en funcionalidad.

El comando de impresión también puede mostrar los resultados de los cálculos y / o llamadas a funciones:

/ regex_pattern /  {  # Acciones a realizar en caso de que el registro (línea) coincida con el anterior regex_pattern  print  3 + 2  print  foobar ( 3 )  print  foobar ( variable )  print  sin ( 3 - 2 ) }

La salida se puede enviar a un archivo:

/ regex_pattern /  {  # Acciones a realizar en caso de que el registro (línea) coincida con el anterior regex_pattern  print  "expresión"  >  "nombre de archivo" }

oa través de una tubería :

/ regex_pattern /  {  # Acciones a realizar en caso de que el registro (línea) coincida con el anterior regex_pattern  print  "expression"  |  "comando" }

Variables integradas [ editar ]

Las variables integradas de Awk incluyen las variables de campo: $ 1, $ 2, $ 3, etc. ($ 0 representa el registro completo). Mantienen el texto o los valores en los campos de texto individuales en un registro.

Otras variables incluyen:

  • NR: 'N'umber of' R'ecords: mantiene un recuento actual del número de registros de entrada leídos hasta el momento de todos los archivos de datos. Comienza en cero, pero nunca se restablece automáticamente a cero. [14]
  • FNR: 'F'ile' N'umber of 'R'ecords: mantiene un recuento actual del número de registros de entrada leídos hasta el momento en el archivo actual. Esta variable se restablece automáticamente a cero cada vez que se inicia un nuevo archivo. [14]
  • NF: 'N'umber of' F'ields: contiene el número de campos en el registro de entrada actual. El último campo en el registro de entrada puede ser designado por $ NF, el segundo al último campo por $ (NF-1), el tercer al último campo por $ (NF-2), etc.
  • FILENAME: Contiene el nombre del archivo de entrada actual.
  • FS: 'F'ield' S'eparator: contiene el carácter "separador de campo" utilizado para dividir campos en el registro de entrada. El "espacio en blanco" predeterminado incluye cualquier espacio y caracteres de tabulación. FS se puede reasignar a otro carácter para cambiar el separador de campo.
  • RS: 'R'ecord' S'eparator: almacena el carácter "separador de registro" actual. Dado que, de forma predeterminada, una línea de entrada es el registro de entrada, el carácter separador de registro predeterminado es una "nueva línea".
  • OFS: 'O'utput' F'ield 'S'eparator: almacena el "separador de campo de salida", que separa los campos cuando Awk los imprime. El valor predeterminado es un carácter de "espacio".
  • ORS: 'O'utput' R'ecord 'S'eparator: almacena el "separador de registros de salida", que separa los registros de salida cuando Awk los imprime. El valor predeterminado es un carácter de "nueva línea".
  • OFMT: 'O'utput' F'or'M'a'T ': almacena el formato para la salida numérica. El formato predeterminado es "% .6g".

Variables y sintaxis [ editar ]

Los nombres de las variables pueden utilizar cualquiera de los caracteres [A-Za-z0-9_], con la excepción de las palabras clave del idioma. Los operadores + - * / representan suma, resta, multiplicación y división, respectivamente. Para la concatenación de cadenas , simplemente coloque dos variables (o constantes de cadena) una al lado de la otra. Es opcional usar un espacio intermedio si hay constantes de cadena involucradas, pero dos nombres de variable colocados adyacentes entre sí requieren un espacio intermedio. Las comillas dobles delimitan las constantes de cadena. Las declaraciones no tienen por qué terminar con punto y coma. Finalmente, se pueden agregar comentarios a los programas usando # como el primer carácter en una línea.

Funciones definidas por el usuario [ editar ]

En un formato similar a C , las definiciones de función consisten en la palabra clave function, el nombre de la función, los nombres de los argumentos y el cuerpo de la función. A continuación se muestra un ejemplo de función.

función  add_three  ( número )  {  número de retorno  + 3 }  

Esta declaración se puede invocar de la siguiente manera:

( patrón ) {  print  add_three ( 36 )  # Salidas '' '39' '' }

Las funciones pueden tener variables que se encuentran en el ámbito local. Los nombres de estos se agregan al final de la lista de argumentos, aunque los valores para estos deben omitirse al llamar a la función. Es una convención agregar algunos espacios en blanco en la lista de argumentos antes de las variables locales, para indicar dónde terminan los parámetros y comienzan las variables locales.

Ejemplos [ editar ]

Hola mundo [ editar ]

Este es el programa habitual " Hola, mundo " escrito en AWK:

EMPEZAR  {  imprimir  "¡Hola, mundo!"  }

Tenga en cuenta que exitaquí no se necesita una declaración explícita ; dado que el único patrón es BEGIN, no se procesan argumentos de línea de comandos.

Imprimir líneas de más de 80 caracteres [ editar ]

Imprima todas las líneas de más de 80 caracteres. Tenga en cuenta que la acción predeterminada es imprimir la línea actual.

longitud ( $ 0 )  >  80

Contar palabras [ editar ]

Cuente palabras en la entrada e imprima el número de líneas, palabras y caracteres (como wc ):

{  palabras  + =  caracteres NF  + = longitud + 1 # agregar uno para tener en cuenta el carácter de nueva línea al final de cada registro (línea) } FIN { imprimir NR , palabras , caracteres }           

Como no hay un patrón para la primera línea del programa, cada línea de entrada coincide de forma predeterminada, por lo que las acciones de incremento se ejecutan para cada línea. Tenga en cuenta que words += NFes una abreviatura de words = words + NF.

Suma la última palabra [ editar ]

{  s  + =  $ NF  } END  {  imprimir  s  +  0  }

s se incrementa con el valor numérico de $ NF , que es la última palabra de la línea definida por el separador de campo de AWK (por defecto, espacio en blanco). NF es el número de campos en la línea actual, p. Ej. 4. Dado que $ 4 es el valor del cuarto campo, $ NF es el valor del último campo de la línea independientemente de cuántos campos tenga esta línea o si tiene más o menos campos que las líneas circundantes. $ es en realidad un operador unario con la mayor precedencia de operadores . (Si la línea no tiene campos, entonces NF es 0, $ 0 es la línea completa, que en este caso está vacía aparte del posible espacio en blanco, y también tiene el valor numérico 0).

Al final de la entrada, el patrón END coincide, por lo que se imprime s . Sin embargo, dado que es posible que no haya habido ninguna línea de entrada, en cuyo caso nunca se ha asignado ningún valor a s , por defecto será una cadena vacía. Agregar cero a una variable es un modismo AWK para forzarlo de una cadena a un valor numérico. (Concatenar una cadena vacía es coaccionar de un número a una cadena, por ejemplo, s "" . Tenga en cuenta que no hay un operador para concatenar cadenas, simplemente se colocan adyacentes). Con la coerción, el programa imprime "0" en una entrada vacía , sin él se imprime una línea vacía.

Coincidir con un rango de líneas de entrada [ editar ]

NR  %  4  ==  1 ,  NR  %  4  ==  3  {  printf  "% 6d% s \ n" ,  NR ,  $ 0  }

La declaración de acción imprime cada línea numerada. La función printf emula el printf estándar de C y funciona de manera similar al comando de impresión descrito anteriormente. Sin embargo, el patrón para hacer coincidir funciona de la siguiente manera: NR es el número de registros, normalmente líneas de entrada, que AWK ha leído hasta ahora, es decir, el número de línea actual, comenzando en 1 para la primera línea de entrada. % es el operador de módulo . NR% 4 == 1 es cierto para la 1ª, 5ª, 9ª, etc., líneas de entrada. Asimismo, NR% 4 == 3es cierto para las líneas de entrada 3, 7, 11, etc. El patrón de rango es falso hasta que coincide la primera parte, en la línea 1, y luego permanece verdadero hasta e inclusive cuando coincide la segunda parte, en la línea 3. Luego permanece falso hasta que la primera parte coincide nuevamente en la línea 5.

Por lo tanto, el programa imprime las líneas 1, 2, 3, salta la línea 4 y luego la 5, 6, 7, y así sucesivamente. Para cada línea, imprime el número de línea (en un campo de 6 caracteres) y luego el contenido de la línea. Por ejemplo, cuando se ejecuta en esta entrada:

RomaFlorenciaMilánNápolesTurinVenecia

El programa anterior imprime:

 1 Roma 2 Florencia 3 Milán 5 Turín 6 Venecia

Impresión de la parte inicial o final de un archivo [ editar ]

Como caso especial, cuando la primera parte de un patrón de rango es constantemente verdadera, por ejemplo , 1 , el rango comenzará al principio de la entrada. De manera similar, si la segunda parte es constantemente falsa, por ejemplo , 0 , el rango continuará hasta el final de la entrada. Por ejemplo,

 / ^ - cortar aquí - $ / ,  0

imprime líneas de entrada desde la primera línea que coinciden con la expresión regular ^ - cortar aquí - $ , es decir, una línea que contiene solo la frase "- cortar aquí--", hasta el final.

Calcular frecuencias de palabras [ editar ]

Frecuencia de palabras usando matrices asociativas :

BEGIN  {  FS = "[^ a-zA-Z] +" } {  para  ( i = 1 ;  i <= NF ;  i ++ )  palabras [ tolower ( $ i )] ++ } END  {  para  ( i  en  palabras )  imprimir  i ,  palabras [ i ] }

El bloque BEGIN establece el separador de campo en cualquier secuencia de caracteres no alfabéticos. Tenga en cuenta que los separadores pueden ser expresiones regulares. Después de eso, llegamos a una acción simple, que realiza la acción en cada línea de entrada. En este caso, por cada campo de la línea, sumamos uno al número de veces que aparece esa palabra, primero convertida a minúscula. Finalmente, en el bloque END, imprimimos las palabras con sus frecuencias. La línea

para (yo en palabras)

crea un bucle que pasa por las palabras de la matriz , estableciendo i en cada subíndice de la matriz. Esto es diferente de la mayoría de los lenguajes, donde un ciclo de este tipo pasa por cada valor de la matriz. Por tanto, el bucle imprime cada palabra seguida de su recuento de frecuencia. tolowerfue una adición al awk de One True (ver más abajo) realizado después de la publicación del libro.

Hacer coincidir el patrón desde la línea de comando [ editar ]

Este programa se puede representar de varias formas. El primero usa el shell Bourne para hacer un script de shell que lo hace todo. Es el más corto de estos métodos:

#! / bin / shpatrón = " $ 1 " shift
awk '/' " $ patrón " '/ {print FILENAME ":" $ 0}'  " $ @ "

El $patterncomando en el awk no está protegido por comillas simples para que el shell expanda la variable, pero debe colocarse entre comillas dobles para manejar correctamente los patrones que contienen espacios. Un patrón por sí solo en la forma habitual comprueba si toda la línea ( $0) coincide. FILENAMEcontiene el nombre de archivo actual. awk no tiene un operador de concatenación explícito; dos cadenas adyacentes los concatenan. $0se expande a la línea de entrada original sin cambios.

Hay formas alternativas de escribir esto. Este script de shell accede al entorno directamente desde awk:

#! / bin / shexport  pattern = " $ 1 " shift
awk '$ 0 ~ ENVIRON ["pattern"] {print FILENAME ":" $ 0}'  " $ @ "

Este es un script de shell que usa ENVIRONuna matriz introducida en una versión más reciente de One True awk después de la publicación del libro. El subíndice de ENVIRONes el nombre de una variable de entorno; su resultado es el valor de la variable. Esto es como la función getenv en varias bibliotecas estándar y POSIX . El script de shell crea una variable de entorno que patterncontiene el primer argumento, luego descarta ese argumento y hace que awk busque el patrón en cada archivo.

~comprueba si su operando izquierdo coincide con su operando derecho; !~es su inverso. Tenga en cuenta que una expresión regular es solo una cadena y se puede almacenar en variables.

La siguiente forma usa la asignación de variables de línea de comandos, en la que un argumento para awk puede verse como una asignación a una variable:

#! / bin / shpatrón = " $ 1 " shift
awk '$ 0 ~ patrón {imprimir NOMBRE DE ARCHIVO ":" $ 0}'  "patrón = $ patrón "  " $ @ "

O puede usar la opción de línea de comando -v var = value (por ejemplo, awk -v patrón = "$ patrón" ... ).

Finalmente, esto está escrito en awk puro, sin la ayuda de un shell o sin la necesidad de saber demasiado sobre la implementación del script awk (como lo hace la asignación de variables en la línea de comando uno), pero es un poco largo:

BEGIN  {  patrón  =  ARGV [ 1 ]  para  ( i  =  1 ;  i  <  ARGC ;  i ++ )  # eliminar el primer argumento  ARGV [ i ]  =  ARGV [ i  +  1 ]  ARGC -  if  ( ARGC  ==  1 )  {  # the el patrón era lo único, así que forzar la lectura de la entrada estándar (utilizada por el libro)  ARGC  =  2  ARGV [ 1 ]  = "-"  } } $ 0  ~  patrón  {  print  FILENAME  ":"  $ 0  }

El BEGINes necesario no solo para extraer el primer argumento, sino también para evitar que se interprete como un nombre de archivo después de BEGINque finalice el bloque. ARGC, el número de argumentos, siempre se garantiza que sea ≥1, al igual ARGV[0]que el nombre del comando que ejecutó el script, la mayoría de las veces la cadena "awk". También tenga en cuenta que ARGV[ARGC]es la cadena vacía, "". #inicia un comentario que se expande hasta el final de la línea.

Tenga en cuenta el ifbloque. awk solo verifica si debe leer de la entrada estándar antes de ejecutar el comando. Esto significa que

awk 'prog'

¡solo funciona porque el hecho de que no haya nombres de archivo solo se verifica antes de progejecutar! Si lo establece explícitamente ARGCen 1 para que no haya argumentos, awk simplemente se cerrará porque siente que no hay más archivos de entrada. Por lo tanto, debe decir explícitamente leer desde la entrada estándar con el nombre de archivo especial -.

Secuencias de comandos AWK autónomas [ editar ]

En sistemas operativos similares a Unix, se pueden construir scripts AWK autónomos utilizando la sintaxis shebang .

Por ejemplo, una secuencia de comandos que imprime el contenido de un archivo determinado se puede construir creando un archivo print.awkcon el siguiente contenido:

#! / usr / bin / awk -f {  imprimir  $ 0  }

Se puede invocar con: ./print.awk <filename>

El -fle dice a AWK que el argumento que sigue es el archivo para leer el programa AWK, que es el mismo indicador que se usa en sed. Dado que a menudo se utilizan para frases breves, ambos programas ejecutan de forma predeterminada un programa dado como un argumento de línea de comandos, en lugar de un archivo separado.

Versiones e implementaciones [ editar ]

AWK se escribió originalmente en 1977 y se distribuyó con la versión 7 de Unix .

En 1985, sus autores comenzaron a expandir el lenguaje, de manera más significativa al agregar funciones definidas por el usuario. El lenguaje se describe en el libro El Lenguaje de programación AWK , publicada 1988, y se puso a disposición de su aplicación en las versiones de UNIX System V . Para evitar confusiones con la versión anterior incompatible, esta versión a veces se llamaba "nueva awk" o nawk . Esta implementación fue lanzada bajo una licencia de software libre en 1996 y Brian Kernighan aún la mantiene (vea los enlaces externos a continuación). [ cita requerida ]

Se incluyen versiones antiguas de Unix, como UNIX / 32V , awkccque convirtió AWK en C. Kernighan escribió un programa para convertir awk en C ++; se desconoce su estado. [15]

  • BWK awk , también conocido como nawk , se refiere a la versión de Brian Kernighan . Se le ha denominado "One True AWK" debido al uso del término en asociación con el libro que describió originalmente el idioma y al hecho de que Kernighan fue uno de los autores originales de AWK. [7] FreeBSD se refiere a esta versión como one-true-awk . [16] Esta versión también tiene características que no están en el libro, como tolowery ENVIRONque se explican anteriormente; consulte el archivo FIXES en el archivo de origen para obtener más detalles. Esta versión la utilizan, por ejemplo, Android , FreeBSD , NetBSD , OpenBSD , macOSe illumos . Brian Kernighan y Arnold Robbins son los principales contribuyentes a un repositorio de fuentes para nawk : github .com / onetrueawk / awk .
  • gawk ( GNU awk) es otra implementación de software libre y la única implementación que logra un progreso serio en la implementación de la internacionalización y localización y las redes TCP / IP. Fue escrito antes de que la implementación original estuviera disponible gratuitamente. Incluye su propio depurador y su generador de perfiles permite al usuario realizar mejoras medidas en el rendimiento de un script. También permite al usuario ampliar la funcionalidad con bibliotecas compartidas. Algunas distribuciones de Linux incluyen gawk como su implementación AWK predeterminada. [ cita requerida ]
    • gawk-csv . La extensión CSV de gawk proporciona funciones para manejar datos con formato CSV de entrada y salida. [17]
  • mawk es una implementación AWK muy rápido por Mike Brennan basado en un código de bytes intérprete.
  • libmawk es una bifurcación de mawk, que permite a las aplicaciones incrustar múltiples instancias paralelas de intérpretes awk.
  • awka (cuya interfaz está escrita sobre el programa mawk ) es otro traductor de scripts AWK al código C. Cuando se compilan, incluyendo estáticamente la libawka.a del autor, los ejecutables resultantes se aceleran considerablemente y, según las pruebas del autor, se comparan muy bien con otras versiones de AWK, Perl o Tcl . Los pequeños scripts se convertirán en programas de 160-170 kB.
  • tawk (Thompson AWK) es un compilador AWK para Solaris , DOS , OS / 2 y Windows , vendido anteriormente por Thompson Automation Software (que ha cesado sus actividades). [18]
  • Jawk es un proyecto para implementar AWK en Java , alojado en SourceForge. [19] Se agregan extensiones al lenguaje para proporcionar acceso a las funciones de Java dentro de los scripts AWK (es decir, subprocesos, sockets, colecciones de Java, etc.).
  • xgawk es una bifurcación de gawk [20] que extiende gawk con bibliotecas cargables dinámicamente. La extensión XMLgawk se integró en la versión oficial de GNU Awk 4.1.0.
  • QSEAWK es una implementación de intérprete AWK incorporada incluida en la biblioteca QSE que proporciona una interfaz de programación de aplicaciones (API) incorporada para C y C ++ . [21]
  • libfawk es un intérprete muy pequeño, solo de función, reentrante e incrustable escrito en C
  • BusyBox incluye una implementación AWK escrita por Dmitry Zakharov. Esta es una implementación muy pequeña adecuada para sistemas integrados.

Libros [ editar ]

  • Aho, Alfred V .; Kernighan, Brian W .; Weinberger, Peter J. (1 de enero de 1988). El lenguaje de programación AWK . Nueva York, NY: Addison-Wesley . ISBN 0-201-07981-X. Consultado el 22 de enero de 2017 .
  • Robbins, Arnold (15 de mayo de 2001). Programación awk efectiva (3ª ed.). Sebastopol, CA: O'Reilly Media . ISBN 0-596-00070-7. Consultado el 16 de abril de 2009 .
  • Dougherty, Dale ; Robbins, Arnold (1 de marzo de 1997). sed & awk (2ª ed.). Sebastopol, CA: O'Reilly Media. ISBN 1-56592-225-5. Consultado el 16 de abril de 2009 .
  • Robbins, Arnold (2000). Programación eficaz de Awk: una guía del usuario para Gnu Awk (1.0.3 ed.). Bloomington, IN: iUniverse . ISBN 0-595-10034-1. Archivado desde el original el 12 de abril de 2009 . Consultado el 16 de abril de 2009 .

Ver también [ editar ]

  • Transformación de datos
  • Programación impulsada por eventos
  • Lista de comandos de Unix
  • sed

Referencias [ editar ]

  1. ^ Stutz, Michael (19 de septiembre de 2006). "Empiece a utilizar GAWK: conceptos básicos del lenguaje AWK" (PDF) . developerWorks . IBM . Consultado el 29 de enero de 2015 . [AWK] a menudo se denomina lenguaje basado en datos: las declaraciones del programa describen los datos de entrada que deben coincidir y procesar en lugar de una secuencia de pasos del programa.
  2. ^ Andreas J. Pilavakis (1989). Taller UNIX . Macmillan International Higher Education. pag. 196.
  3. ^ Arnold Robbins (2015). Programación Awk eficaz: procesamiento de texto universal y coincidencia de patrones (4ª ed.). O'Reilly Media. pag. 560.
  4. ↑ a b James W. Livingston (2 de mayo de 1988). "El gran programa awk no es un cerebro de pájaro". Revisión digital . pag. 91.
  5. ^ Raymond, Eric S. "Aplicación de minilenguajes" . El arte de la programación Unix . Estudio de caso: awk. Archivado desde el original el 30 de julio de 2008 . Consultado el 11 de mayo de 2010 . El lenguaje de acción awk es Turing completo y puede leer y escribir archivos.
  6. ^ Aho, Alfred V .; Kernighan, Brian W .; Weinberger, Peter J. (1 de septiembre de 1978). Awk: un lenguaje de procesamiento y escaneo de patrones (segunda edición) (informe técnico). Manual de la séptima edición de Unix, volumen 2. Bell Telephone Laboratories, Inc.
  7. ^ a b Aho, Alfred V .; Kernighan, Brian W .; Weinberger, Peter J. (1988). El lenguaje de programación AWK . Compañía editorial de Addison-Wesley. ISBN 9780201079814. Consultado el 16 de mayo de 2015 .
  8. ^ "Especial de UNIX: Profs Kernighan y Brailsford" . Computerphile . 30 de septiembre de 2015.
  9. ^ "La especificación de UNIX única, versión 3, tabla de interfaz de utilidades" . Archivado desde el original el 5 de enero de 2018 . Consultado el 18 de diciembre de 2005 .
  10. ^ "Capítulo 15. Comandos y utilidades". Especificación de núcleo estándar de Linux 4.0 (informe técnico). Fundación Linux. 2008.
  11. ↑ a b c Robbins, Arnold (marzo de 2014). "El proyecto GNU y yo: 27 años con GNU AWK" (PDF) . skeeve.com . Consultado el 4 de octubre de 2014 .
  12. ^ Dougherty, Dale; Robbins, Arnold (1997). sed & awk (2ª ed.). Sebastopol, CA: O'Reilly. pag. 221. ISBN 1-565-92225-5.
  13. ^ Hamilton, Naomi (30 de mayo de 2008). "El AZ de los lenguajes de programación: AWK" . Computerworld . Consultado el 12 de diciembre de 2008 .
  14. ^ a b https://www.gnu.org/software/gawk/manual/html_node/Records.html#index-FNR-variable
  15. ^ Kernighan, Brian W. (24-25 de abril de 1991). Un traductor AWK a C ++ (PDF) . Conferencia Usenix C ++. Washington DC. págs. 217–228.
  16. ^ "Registro de trabajo de FreeBSD para importar BWK awk al núcleo de FreeBSD" . 16 de mayo de 2005. Archivado desde el original el 8 de septiembre de 2013 . Consultado el 20 de septiembre de 2006 .
  17. ^ Documentación de gawk-csv en http://gawkextlib.sourceforge.net/csv/gawk-csv.html
  18. ^ James K. Lawless (1 de mayo de 1997). "Examinando el compilador TAWK" . Diario del Dr. Dobb .
  19. ^ Jawk en SourceForge
  20. ^ Página de inicio de xgawk
  21. ^ QSEAWK en GitHub

Lectura adicional [ editar ]

  • Hamilton, Naomi (30 de mayo de 2008). "El AZ de los lenguajes de programación: AWK" . Computerworld . Consultado el 12 de diciembre de 2008 . - Entrevista a Alfred V. Aho en AWK
  • Robbins, Daniel (1 de diciembre de 2000). "Awk por ejemplo, Parte 1: Una introducción al gran lenguaje con el nombre extraño" . Hilos comunes . IBM DeveloperWorks . Consultado el 16 de abril de 2009 .
  • Robbins, Daniel (1 de enero de 2001). "Awk por ejemplo, parte 2: registros, bucles y matrices" . Hilos comunes . IBM DeveloperWorks . Consultado el 16 de abril de 2009 .
  • Robbins, Daniel (1 de abril de 2001). "Awk por ejemplo, Parte 3: Funciones de cadena y ... ¿talonarios de cheques?" . Hilos comunes . IBM DeveloperWorks. Archivado desde el original el 19 de mayo de 2009 . Consultado el 16 de abril de 2009 .
  • AWK: conviértase en un experto en 60 minutos
  • awk: lenguaje de procesamiento y escaneo de patrones - Referencia de comandos y utilidades, Especificación única de UNIX , Número 7 de The Open Group
  • gawk(1) -  Manual del usuario de Linux - Comandos de usuario
  • Gawkinet : interconexión TCP / IP con Gawk

Enlaces externos [ editar ]

  • The Amazing Awk Assembler de Henry Spencer .
  • AWK en Curlie
  • awklang.org El sitio para cosas relacionadas con el idioma awk