Descubre cómo usar awk en GNU/Linux para analizar y procesar texto de forma eficiente.


awk es una de las herramientas más potentes y versátiles del ecosistema GNU/Linux. Forma parte de las utilidades clásicas de procesamiento de texto junto con sed y grep, y permite analizar, filtrar y manipular datos estructurados en columnas de forma eficiente. Su nombre proviene de las iniciales de sus creadores: Aho, Weinberger y Kernighan.

¿Para qué se usa awk?

awk se utiliza principalmente para procesar archivos de texto o la salida de otros comandos, especialmente cuando los datos están organizados en columnas. Es capaz de:

  • Filtrar líneas según condiciones.
  • Extraer o imprimir campos específicos.
  • Realizar operaciones matemáticas y estadísticas.
  • Formatear la salida de datos.
  • Automatizar tareas de análisis en scripts.

En entornos GNU/Linux, es habitual usar awk para analizar logs, extraer información de salidas de comandos o generar reportes rápidos sin necesidad de recurrir a lenguajes de programación más complejos.

Sintaxis básica

awk 'patrón { acción }' archivo

O bien, leyendo desde un comando:

comando | awk 'patrón { acción }'
  • patrón: condición que deben cumplir las líneas para ejecutar la acción.
  • acción: lo que awk hará con esas líneas (por ejemplo, imprimir campos, hacer sumas, etc.).
  • Si no se especifica patrón, se aplica a todas las líneas.
  • Si no se especifica acción, awk imprime la línea completa.

Variables especiales comunes:

  • $0: línea completa.
  • $1, $2, ... $n: campos individuales de la línea.
  • NF: número de campos.
  • NR: número de línea actual.
  • FS: delimitador de campos (por defecto, espacio o tabulación).

Ejemplos prácticos

A continuación os dejamos algunos ejemplos interesantes del comando.

Imprimir la primera columna de un archivo

awk '{ print $1 }' usuarios.txt

Este comando imprime únicamente el primer campo (columna) de cada línea del archivo usuarios.txt.

Mostrar nombre y shell de los usuarios del sistema

awk -F: '{ print $1, $7 }' /etc/passwd

Usa : como delimitador (-F:) para mostrar el nombre de usuario y el shell asignado en el archivo /etc/passwd.

Filtrar usuarios con UID mayor a 1000

awk -F: '$3 >= 1000 { print $1, $3 }' /etc/passwd

Filtra y muestra solo los usuarios con un identificador de usuario (UID) mayor o igual a 1000, normalmente usuarios no del sistema.

Calcular el uso total de disco de un usuario

du -m /home/t3rr0rz0n3 | awk '{ total += $1 } END { print "Uso total:", total, "MB" }'

Suma el tamaño de cada subdirectorio dentro de /home/t3rr0rz0n3 y muestra el total en megabytes.

Mostrar líneas con más de 3 campos en un fichero CSV

awk -F, 'NF > 3' datos.csv

Imprime solo las líneas de datos.csv que contienen más de tres campos, útil para detectar registros incompletos o corruptos.

Calcular el promedio de un conjunto de números

awk '{ sum += $1 } END { print "Promedio:", sum / NR }' numeros.txt

Calcula la media de todos los números que aparecen en la primera columna del archivo numeros.txt.

Cambiar el delimitador de salida

awk 'BEGIN { OFS=" | " } { print $1, $2, $3 }' archivo.txt

Define | como delimitador de salida (OFS), separando los tres primeros campos de cada línea.

Formatear salida con texto personalizado

awk '{ printf "Usuario: %-15s | ID: %s\n", $1, $3 }' /etc/passwd

Muestra los campos formateados en columnas fijas, alineando los nombres de usuario y sus identificadores para una salida más legible.

Conclusión

awk es mucho más que una simple herramienta de impresión de columnas: es un lenguaje completo para procesar texto. Con solo unas líneas puedes realizar operaciones complejas de análisis y filtrado de datos, convirtiéndolo en una herramienta imprescindible para cualquier usuario de GNU/Linux.

¿Buscas otro comando?

¡Revisa nuestro "Diccionario de comandos para GNU/Linux"!

Diccionario de comandos para GNU/Linux

Más sobre ./voidNull

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación