Conteo y Resumen de Datos
AWK es excelente para contar ocurrencias y resumir datos. Vamos a usarlo para contar el número de solicitudes por cada código de estado HTTP.
Ejecuta este comando:
awk '{count[$6]++} END {for (code in count) print code, count[code]}' server_logs.txt | sort -n
Este comando es más complejo, así que vamos a explicarlo paso a paso:
-
{count[$6]++} - Esta es la acción principal realizada para cada línea:
count es un array (matriz asociativa o diccionario) que estamos creando.
[$6] utiliza el valor del sexto campo (código de estado) como índice o clave del array.
++ es el operador de incremento, que suma 1 al valor actual.
- Así, por cada línea, incrementamos el contador para el código de estado específico encontrado.
-
END {for (code in count) print code, count[code]} - Esto se ejecuta después de procesar todas las líneas:
END es un patrón especial que coincide con el final de la entrada.
{...} contiene la acción a realizar tras procesar todo el archivo.
for (code in count) es un bucle que recorre todas las claves del array count.
print code, count[code] imprime cada código de estado y su respectivo conteo.
-
| sort -n - Envía la salida al comando sort, que ordena los resultados numéricamente.
Cuando AWK procesa un array como count[$6]++, automáticamente:
- Crea el array si no existe.
- Crea un nuevo elemento con valor 0 si la clave no existe.
- Luego incrementa el valor en 1.
Deberías ver una salida similar a esta:
200 3562
301 45
302 78
304 112
400 23
403 8
404 89
500 15
Este resumen muestra rápidamente la distribución de los códigos de estado en tu archivo de registro.
Ahora, busquemos los 5 recursos a los que se ha accedido con más frecuencia:
awk '{count[$5]++} END {for (resource in count) print count[resource], resource}' server_logs.txt | sort -rn | head -n 5
Este comando sigue un patrón similar con algunos cambios:
{count[$5]++} - Cuenta las ocurrencias del quinto campo (el recurso solicitado).
END {for (resource in count) print count[resource], resource} - Tras procesar todas las líneas:
- Imprime primero el conteo y luego el recurso.
- Este cambio de orden facilita la ordenación numérica por cantidad.
| sort -rn - Ordena numéricamente en orden inverso (los conteos más altos primero).
| head -n 5 - Limita la salida a las primeras 5 líneas (los 5 resultados principales).
Salida:
1823 /index.html
956 /about.html
743 /products.html
512 /services.html
298 /contact.html
Estos comandos de AWK demuestran el poder de usar arrays para contar y resumir. Puedes adaptar este patrón para contar cualquier campo o combinación de campos en tus datos.
Por ejemplo, para contar el número de solicitudes por dirección IP:
awk '{count[$3]++} END {for (ip in count) print ip, count[ip]}' server_logs.txt
Para contar solicitudes tanto por método como por estado:
awk '{key=$4"-"$6; count[key]++} END {for (k in count) print k, count[k]}' server_logs.txt
Estos resúmenes pueden ayudarte a comprender los patrones de tráfico e identificar recursos populares (o problemáticos) en tu servidor.