CodeGym /Cursos /Docker SELF /Formateo de datos utilizando `awk`

Formateo de datos utilizando `awk`

Docker SELF
Nivel 8 , Lección 2
Disponible

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:

  1. cat /var/log/syslog — lee el contenido del archivo.
  2. awk '{print $5}' — extrae la quinta columna (nombre del proceso).
  3. sort — ordena las líneas alfabéticamente.
  4. uniq -c — cuenta el número de líneas únicas.
  5. sort -nr — ordena las líneas por orden descendente del valor numérico.
  6. 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!

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION