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 }' archivoO 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 queawkhará 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,
awkimprime 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/LinuxMás sobre ./voidNull
- 📖 Aprende todos sobre los comandos de GNU/Linux en nuestro Diccionario "De la A a la Z: Los comandos de GNU/Linux"
- 💪 ¡Forma parte de la Comunidad de ./voidNull!
- 🤖 Disfruta de todos nuestros Cursos sobre Ansible, Proxmox, Home Assistant entre otros.
- 📩 Mantente actualizado con lo último en GNU/Linux y Software Libre. Recibe nuestra Newsletter mensual.
Comentarios