Búsquedas simples con AWK en GNU Linux

No es la primera ni última vez que tendremos que realizar búsquedas sencillas o complejas en tablas de texto. AWK nos facilitará las cosas.

AWK es una lenguaje de programación, con una sintaxis similar a C, diseñado para procesar datos basados en texto, ya sean ficheros o flujos de datos. Fue una de las primeras herramientas aparecidas en UNIX.

En nuestro artículo usaremos gawk, que es la versión libre del mismo programa.

¿Cómo funciona?

El script escrito usando AWK analiza un fichero de entrada de línea, buscando pautas. Y cuando encuentra una coincidencia, realiza la acción programada.

La sintaxis es la siguiente:

gawk [opciones] ‘programa AWK’ fichero

Vamos a partir de la base que tenemos un fichero con la siguiente información:

awk-gawk-gnu-linux-01Se trata de la discografía de Metallica.

Vamos a listar la información del fichero, pero sólo la información de la primera columna:

  1. gawk '{print $1}' Discografia-Metallica

Y obtendremos el siguiente resultado:

awk-gawk-gnu-linux-02

Si observamos bien veremos que nos ha devuelto sólo la primera parte de los títulos, esto es debido a que gawk solo nos muestra la primera palabra por columna. Es decir, es efectivo tratando palabras por separado.

Vamos a trabajar con un archivo más adecuado, cómo el siguiente:

awk-gawk-gnu-linux-03

Se tratan de unos datos ficticios de producción por países. El fichero se llama ‘producción

Si utilizamos $0 nos mostrará la información a todas las líneas:

  1. gawk '{print $0}' produccion

Podemos ver el resultado:

awk-gawk-gnu-linux-04

Vamos a empezar a filtrar. Supongamos que nuestro archivo tiene centenares de filas y sólo queremos que nos de información de las filas que empiecen por Cuba, lo haríamos de la siguiente manera:

  1. gawk '$1=="Cuba" {print $0}' produccion

Y obtenemos el resultado:

awk-gawk-gnu-linux-05

Usando una línea similar podemos obtener el resultado contrario, es decir, mostrar todos los países menos cuba, lo haríamos cambiando ‘==‘ por ‘!=’, si habéis programado en C, veréis que es igual.

Supongamos que tenemos otro fichero, pero esta vez en la primera columna aparecen los años de producción. Por ejemplo, desde el 1980 hasta el 1995, y sólo queremos que nos muestre la información, entre los años 1990 y 1995.  Obtendríamos el resultado usando dos expresiones regulares:

  1. gawk '/1990,/1995/ {print $0} fichero

Cómo en muchos casos en sistemas tipo UNIX, cómo GNU Linux, podemos enviar la salida a otro fichero:

  1. gawk '/1990,/1995/ {print $0}' fichero > fichero

Al igual que en otros lenguajes podemos utilizar operadores booleanos.

Imaginemos que tenemos un fichero con los datos de cientos de computadores, queremos que nos filtre por los que sean DELL y que hayan entrado en el stock en el año 2010.

Sería así;

  1. gawk '($2=="DELL") && ($6=="2010") {print $0}' fichero

Cuando usamos operadores boolenos debemos de usar paréntesis.

Esto es una ínfima parte de lo que se puede hacer con AWK, os recomiendo los siguientes enlaces, algunos de manuales en línea, para profundizar en el tema:

Manual AWK, Autor: Jesús Alberto Vidal Cortés

Manual AWK de aprendiendousarlinux

Existen muchísimos enlaces con contenido sobre AWK, a navegar!!

See you soon!