AWK: una introducción a esta excelente herramienta

tux_awk awkAWK es una pequeña y rápida herramienta que permite realizar varias tareas en un intérprete de comandos, y facilitarnos el trabajo a los sysadmin’s.


El principal uso de esta excelente herramienta es el de filtrar por columnas los datos de una lista o tabla tomada desde el stdin. Así, las variables $i corresponden con el valor de la i-esima columna del listado.

Podemos mostrar varias columnas de la siguiente forma:

También podemos cambiar, mediante la opción -F, el delimitador de columnas, como sigue:

Operaciones aritméticas con awk

Veamos ahora un pequeño ejemplo en el que podemos realizar una operación aritmética con awk, le pasamos un numero de bytes y nos calcula los KiB correspondientes:

Además, cabe notar

imprime 33, mientras que:

imprime 1122, y

imprime “11 22”.

Uso de variables

En awk existen además algunas variables particulares, además de $1, $2, etc, que marcan el contenido de cada columna. NF por ejemplo hace referencia al último elemento de la lista, mientras que $0 almacena la entrada completa.

Veamos un ejemplo

Además, también podemos crear nuestras propias variables utilizando nombres particulares que no coincidan con las palabras reservadas de awk. No es necesario declarar las variables en el lenguaje.

Supongamos que la salida del comando en cuestión es una tabla, nosotros podríamos calcular el promedio de cada línea de la siguiente manera:

Como se podrá apreciar, la sintaxis de la programación de control de _awk_ es similar a la del lenguaje C 🙂

Bloques de código

Podemos tener varios bloques de instrucciones etiquetados, por ejemplo, si queremos mostrar algo antes de proceder a trabajar con las entradas, podemos crear un bloque BEGIN. Igualmente para END al ejecutar código al final del análisis:

Veamos cómo podemos agregar una cabecera y un pie a la siguiente salida de nombres de archivos:tamaño:

O incluso más, calculemos el total de lo que suman los tamaños de los archivos!

La sintaxis de los bucles es exactamente la misma que en lenguaje C, veamos un ejemplo de while muy simple:

Y si nos gusta programar en C, aquí la despedida 🙂

echo "Hasta la proxima"| awk '{for(i=1;i<=NF;i++){printf "%s ", $i;system("sleep 1")};print "!! :-)"}'

Conclusión

AWK es todo un lenguaje de programación, en este artículo hemos citado algunos ejemplos útiles, pero la realidad es que es uno de los comandos más potentes de la línea de comandos.

Sin ir más lejos, se han escrito libros enteros explicando sus funcionalidades, que incluyentux_util

  • Effective_awk_Programming de Arnold Robbins
  • The_AWK_Programming Language, de Aho, Kernighan  y Weinberger.
  • Sed_&_Awk, de Dougherty y Robbinson

O, una excelente guía de la versión GPL de _awk_: gawk, que puede descargarse directamente desde el sitio de la GNU:

https://www.gnu.org/software/gawk/

¡¡Hasta la próxima!!