Ejemplos con awk: proceso de archivos y flujo de texto

En esta oportunidad vamos a compartir ejemplos con awk que nos permitan demostrar mejor las bondades de esta herramienta, a modo de continuación del post anterior (Awk: introducción al proceso de archivos de texto). Ustedes seguramente recordarán que en esa oportunidad presentamos a awk como una utilidad muy robusta para realizar tareas de procesamiento de archivos o flujos de texto.

Ejemplos con awk: operaciones matemáticas

Imaginemos el siguiente escenario. Tenemos una lista de categorías de producto, la descripción, y el precio unitario de cada uno en el archivo productos.csv:

limpieza,detergente,18.5
limpieza,lavandina,54.9
higiene,jabon,13.5
higiene,desodorante,28.9
limpieza,desinfectante,63.4
libreria,cuaderno,29.9
libreria,lapiz,8
libreria,goma,4.5
limpieza,plumero,80
higiene,perfume,99.9

Veamos cómo sumar los precios unitarios por categoría:

Librería:

[pastacode lang=»bash» manual=»awk%20-v%20FS%3D’%2C’%20’%2Flibreria%2F%20%7B%20s%20%2B%3D%20%243%20%7D%20END%20%7B%20print%20%22La%20suma%20de%20los%20productos%20de%20libreria%20es%20%24%22%20s%20%7D’%20productos.csv» message=»» highlight=»» provider=»manual»/]

Higiene:

[pastacode lang=»bash» manual=»awk%20-v%20FS%3D’%2C’%20’%2Fhigiene%2F%20%7B%20s%20%2B%3D%20%243%20%7D%20END%20%7B%20print%20%22La%20suma%20de%20los%20productos%20de%20higiene%20es%20%24%22%20s%20%7D’%20productos.csv» message=»» highlight=»» provider=»manual»/]

Limpieza:

[pastacode lang=»bash» manual=»awk%20-v%20FS%3D’%2C’%20’%2Flimpieza%2F%20%7B%20s%20%2B%3D%20%243%20%7D%20END%20%7B%20print%20%22La%20suma%20de%20los%20productos%20de%20limpieza%20es%20%24%22%20s%20%7D’%20productos.csv» message=»» highlight=»» provider=»manual»/]

Si prestamos atención, primero encontramos una expresión regular que indica el criterio de búsqueda (/libreria/, por ejemplo). A continuación indicamos que se acumule en la variable s la suma de los valores presentes en el tercer campo del archivo productos.csv. Al finalizar (END), se debe imprimir por pantalla el resultado junto con el mensaje indicado.

Como podemos ver, en una sola línea pudimos realizar múltiples operaciones. Como si esto fuera poco, podemos incluso guardar los comandos awk en un archivo (usaremos libreria.awk para ilustrar) y utilizarlo como entrada de instrucciones mediante la opción -f.

Guardemos la siguiente línea en libreria.awk:

/libreria/ { s += $3 } END { print "La suma de los productos de libreria es $" s }

Ambas alternativas (especificar el argumento de awk en la línea de comandos o mediante el contenido de un archivo) se muestran en la Fig. 1:

Comparación de ejemplos con awk
Figura 1 – Comparación de ejemplos con awk

Consideremos otro ejemplo con el mismo archivo. Mostremos únicamente los productos (de la categoría que fuesen) cuyo precio sea menor a $50. Ya que vimos que existe la posibilidad de insertar los comandos directamente en un archivo en vez de especificarlos en la línea de comandos, creemos el archivo precioscuidados.awk con el siguiente contenido:

{ if ($3 < 50) print "El precio de",$2,"es $"$3 }

En este caso queremos mostrar un mensaje por pantalla que conste del contenido de los campos 2 y 3 en el caso de que el precio sea menor que el precio dado. El resultado lo podemos ver en la Fig. 2:

Ejemplos con awk: comparación de cantidades
Figura 2 – Ejemplos con awk: comparación de cantidades

Estos ejemplos nos demuestran que awk no solamente es una herramienta sumamente robusta, sino también que permite escalar fácilmente para construir soluciones que requieran de procesamiento detallado de archivos o flujos de texto.

Espero que este post les haya servido. ¡Hasta el próximo!

Deja una respuesta