Guía práctica definitiva del comando awk en Linux

Introducción

En entornos Linux, awk es la herramienta más potente para procesar y filtrar de forma eficiente grandes archivos de texto o datos de registro (logs). Descubra la sintaxis esencial y las aplicaciones prácticas que le permitirán extraer columnas específicas, aplicar filtros condicionales e incluso sumar datos con una sola línea de comandos, sin necesidad de escribir scripts complejos.

1. Principio básico de funcionamiento de awk y extracción de columnas específicas

Para practicar con el comando awk, creamos un archivo de texto de ejemplo con nombres de usuario, ID e información laboral separados por espacios.

cat « ‘EOF’ > sample_users.txt
user1 1001 Developer
user2 1002 Designer
user3 1003 Manager
EOF

Utilizando el comando awk, extraemos e imprimimos de cada línea del archivo el primer campo ($1), correspondiente al nombre de usuario, y el tercer campo ($3), correspondiente al puesto de trabajo, usando el espacio como separador.
Por defecto, si no se especifica un delimitador, awk divide los campos basándose en espacios en blanco o tabulaciones continuas.
⚙️ [Opciones principales]

-F fs : Especifica el separador de campos de entrada (Field Separator).
-v var=val : Asigna una variable y su valor inicial para usar dentro del script awk antes de su ejecución.
-f progfile : Especifica la ruta del archivo que contiene el código del script awk a ejecutar.

awk ‘{print $1, $3}’ sample_users.txt

En el archivo /etc/passwd, cuyos campos están delimitados por dos puntos (:), especificamos el delimitador con la opción -F: y extraemos únicamente el primer campo ($1), correspondiente al nombre de la cuenta, y el sexto campo ($6), correspondiente a la ruta del directorio personal (home), para revisar las primeras 5 líneas.

awk -F: ‘{print $1, $6}’ /etc/passwd | head -n 5

2. Filtrado de datos personalizado mediante condicionales y operadores

Creamos el archivo de práctica server_resources.txt, que contiene datos sobre el uso de CPU y memoria de diferentes servidores.

cat « ‘EOF’ > server_resources.txt
web-server 85 92
db-server 45 60
cache-server 92 40
backup-server 20 15
EOF

Filtramos mediante una expresión condicional aquellos casos donde el segundo campo ($2), correspondiente al uso de CPU, sea igual o superior al 80%, e imprimimos el nombre del servidor junto con un mensaje de advertencia.
Esta técnica resulta muy útil para identificar recursos del sistema que han superado un umbral crítico.

awk ‘$2 >= 80 {print $1 " CPU 경고: " $2 “%”}’ server_resources.txt

Utilizamos el operador lógico AND (&&) para filtrar e imprimir los servidores en estado crítico cuyo uso tanto de CPU ($2) como de memoria ($3) sea igual o superior al 80%.
La aplicación de condiciones compuestas permite aislar únicamente aquellos objetivos donde múltiples recursos han superado el umbral simultáneamente.

awk ‘$2 >= 80 && $3 >= 80 {print “위험 서버: " $1}’ server_resources.txt

3. Estadísticas y sumas con variables integradas y bloques BEGIN/END

Para realizar prácticas de agregación y cálculo estadístico con awk, creamos el archivo de ejemplo sales_data.txt, que incluye nombres de artículos y montos de ventas.

cat « ‘EOF’ > sales_data.txt
Apple 5000
Banana 3000
Orange 4500
Grape 8000
EOF

Con el bloque BEGIN, imprimimos un mensaje de inicio antes de procesar el cuerpo del archivo y acumulamos el valor del segundo campo ($2) de cada línea en la variable sum.
Una vez finalizado el procesamiento de todas las líneas del archivo, se ejecuta el bloque END, donde se calculan e imprimen las ventas totales y el promedio de ventas utilizando la variable interna NR (número total de registros).

awk ‘BEGIN {print “— 매출 집계 시작 —”} {sum += $2; print $1 “: " $2} END {print “——————-”; print “총 매출: " sum “원”; print “평균 매출: " sum/NR “원”}’ sales_data.txt

4. Análisis práctico de registros de servidor web y filtrado de tráfico anómalo

Para realizar prácticas de análisis de logs de servidor web y seguimiento de errores, creamos un archivo de registro de ejemplo access.log en formato estándar de Nginx y Apache.

cat « ‘EOF’ > access.log
192.168.1.10 - - [10/Oct/2026:10:00:01] “GET /index.html” 200 4502
192.168.1.11 - - [10/Oct/2026:10:00:02] “POST /login” 401 1024
192.168.1.12 - - [10/Oct/2026:10:00:03] “GET /api/data” 500 2048
192.168.1.10 - - [10/Oct/2026:10:00:04] “GET /dashboard” 200 8920
192.168.1.13 - - [10/Oct/2026:10:00:05] “POST /login” 401 1024
EOF

Utilizando el operador de coincidencia de expresiones regulares (~), filtramos las líneas correspondientes a errores de cliente 4xx y errores de servidor 5xx, identificando si el noveno campo ($9), que representa el código de estado HTTP, comienza con 4 o 5.
Al extraer únicamente la IP de conexión ($1), el URI solicitado ($7) y el código de estado ($9) de los registros coincidentes, es posible verificar con rapidez incidentes y patrones de tráfico anómalo.

awk ‘$9 ~ /^[45]/ {print $1, $7, $9}’ access.log

Aprovechando los arreglos asociativos de awk (ip[$1]++), contabilizamos el número de solicitudes por cada IP de origen; luego, mediante un bucle en el bloque END, imprimimos el total acumulado y utilizamos la canalización con sort -rn para ordenar los resultados de mayor a menor frecuencia.
Esta es una técnica habitual de análisis en entornos reales para identificar tráfico excesivo o intentos de acceso no autorizados provenientes de una IP específica.

awk ‘{ip[$1]++} END {for (i in ip) print ip[i], i}’ access.log | sort -rn

Hasta aquí hemos revisado la sintaxis básica y los ejemplos prácticos esenciales del comando awk, una herramienta indispensable para resolver con facilidad tareas de procesamiento de texto y análisis masivo de logs en entornos Linux.
Aplique directamente en su trabajo cotidiano las distintas opciones y patrones presentados hoy para automatizar de manera mucho más eficiente la extracción y manipulación repetitiva de datos.