Formateo de datos utilizando awk
1. Introducción a awk
awk
es una poderosa utilidad de texto para procesar datos. Si imaginamos un archivo de texto como una tabla, donde las filas son filas (lógico) y las columnas son datos separados por espacios, entonces awk
se convierte en nuestro mejor amigo. Ayuda a seleccionar columnas rápidamente, filtrar filas, formatear datos e incluso realizar operaciones aritméticas.
Fue nombrado en honor a sus autores: Alfred Aho, Peter Weinberger y Brian Kernighan (sí, el mismo que participó en la creación del lenguaje C).
El concepto principal de awk
es el procesamiento de datos utilizando patrones y acciones, lo que lo convierte en algo parecido a un pequeño lenguaje de programación.
Sintaxis de awk
La sintaxis básica del comando es la siguiente:
awk 'patrón {acción}' archivo
patrón
— la condición que se verifica para cada fila del archivo.acción
— las operaciones realizadas en las filas que coinciden con el patrón.- Si no hay patrón, la acción se realiza para cada fila.
Ejemplo:
awk '{print $1}' data.txt
Este comando imprimirá la primera columna ($1
) para cada fila del archivo data.txt
.
2. Principales funcionalidades de awk
1. Selección de columnas
La forma más sencilla de usar awk
es seleccionar una o varias columnas del archivo. Un campo se identifica como $n
, donde n
es el número de la columna, comenzando desde 1.
Ejemplo:
Mostrar la primera y la tercera columna:
awk '{print $1, $3}' data.txt
Supongamos que nuestro archivo data.txt
luce así:
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
Resultado:
John Engineer
Jane Designer
Mike Developer
2. Procesamiento condicional de líneas
Las condiciones permiten procesar solo las líneas que cumplen ciertos criterios.
Ejemplo:
Mostrar líneas donde el valor en la segunda columna sea mayor que 27:
awk '$2 > 27 {print $1, $2}' data.txt
Resultado:
Jane 30
Mike 28
3. Operaciones aritméticas
awk
puede realizar operaciones aritméticas. Esto es útil cuando necesitas calcular algo sobre la marcha.
Ejemplo:
Agregar 10 al valor en la segunda columna:
awk '{print $1, $2+10}' data.txt
Resultado:
John 35
Jane 40
Mike 38
4. Contar líneas
awk
sabe automáticamente cuántas líneas se han procesado. Esta información se almacena en la variable NR
(Number of Records).
Ejemplo:
Contar la cantidad de líneas en el archivo:
awk 'END {print NR}' data.txt
Resultado:
3
3. Funcionalidades Avanzadas
1. Formateo de la salida
awk
soporta una salida formateada poderosa usando la función printf
. Es un análogo a la función printf
en C.
Ejemplo:
Mostrar datos con alineación:
awk '{printf "%-10s %-5s %-10s\n", $1, $2, $3}' data.txt
Resultado:
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
2. Variables
Puedes usar variables para almacenar datos y simplificar tu trabajo.
Ejemplo:
Sumar los valores de la segunda columna:
awk '{sum += $2} END {print "Edad Total:", sum}' data.txt
Resultado:
Edad Total: 83
3. Expresiones Regulares
awk
soporta expresiones regulares para buscar cadenas.
Ejemplo:
Mostrar las líneas donde la primera columna contiene la letra J
:
awk '/J/ {print $0}' data.txt
Resultado:
John 25 Engineer
Jane 30 Designer
4. Ejemplo práctico
1. Análisis del registro del sistema
Supongamos que tenemos un archivo de registro del sistema /var/log/syslog
, y queremos saber qué procesos se mencionan con mayor frecuencia.
Comando:
cat /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr | head -10
Qué hace:
cat /var/log/syslog
— lee el contenido del archivo.awk '{print $5}'
— extrae la quinta columna (nombre del proceso).sort
— ordena las líneas alfabéticamente.uniq -c
— cuenta el número de líneas únicas.sort -nr
— ordena las líneas por orden descendente del valor numérico.head -10
— muestra el top-10 de procesos.
2. Preparación de un informe de salarios
Tenemos un archivo salaries.txt
:
John 25 4000
Jane 30 5000
Mike 28 4500
Tarea:
Aumentar los salarios en un 10% y mostrar el informe final.
Solución:
awk '{new_salary = $3 * 1.1; printf "%-10s %-5s %-10.2f\n", $1, $2, new_salary}' salaries.txt
Resultado:
John 25 4400.00
Jane 30 5500.00
Mike 28 4950.00
5. Errores comunes al trabajar con awk
Problemas con los delimitadores
Por defecto, awk
utiliza espacios o tabulaciones como delimitadores. Si tus datos están delimitados por algo diferente (por ejemplo, comas o dos puntos), necesitas especificarlo usando la opción -F
.
Ejemplo:
Archivo data.csv
:
John,25,Engineer
Jane,30,Designer
Mike,28,Developer
Comando para trabajar con CSV:
awk -F',' '{print $1, $3}' data.csv
Resultado:
John Engineer
Jane Designer
Mike Developer
Omisión de campos debido a mal formato
A veces las líneas pueden contener espacios inesperados o columnas faltantes. Esto puede causar errores. Siempre es útil verificar los datos antes de comenzar a trabajar.
Aplicación práctica
Acabas de aprender a usar awk
para analizar logs del sistema, procesar datos salariales y crear reportes. Estas habilidades te ayudarán a trabajar con grandes bases de datos, archivos CSV y registros en proyectos reales. Si trabajas en DevOps, analizar logs del sistema usando awk
será tu súper poder. Y si eres desarrollador, es una excelente manera de manipular datos rápidamente directamente desde la terminal.
Para un estudio más profundo de awk
, recomiendo echar un vistazo a la documentación oficial de GNU Awk. ¡Ahora sí sabes cómo hacer que tus datos sean más manejables!
GO TO FULL VERSION