Filtrado de entradas de registro
Una de las fortalezas de AWK es su capacidad para filtrar datos basados en condiciones. Usemos esta función para encontrar todas las solicitudes POST en nuestro archivo de registro, ya que estas pueden ser más sensibles desde el punto de vista de la seguridad que las solicitudes GET.
Ejecute el siguiente comando:
awk '$4 == "POST" {print $0}' server_logs.txt
Desglosemos la sintaxis de este comando para entender cómo funciona el filtrado en AWK:
-
$4 == "POST"
- Este es un patrón o condición que AWK evalúa para cada línea:
$4
se refiere al cuarto campo de la línea actual (en nuestro archivo de registro, este es el método HTTP)
==
es el operador de igualdad que verifica si dos valores son iguales
"POST"
es la cadena contra la que estamos comparando
-
{print $0}
- Esta es la acción que AWK realiza cuando la condición es verdadera:
- Las llaves
{}
encierran la acción
print
es el comando para mostrar texto
$0
representa la línea actual completa (todos los campos)
La estructura del comando sigue el patrón de AWK: condición {acción}
. AWK lee cada línea, y si la condición se evalúa como verdadera, realiza la acción. Si no se especifica ninguna condición (como en nuestros ejemplos anteriores), la acción se realiza para cada línea.
Debería ver una salida similar a esta:
2023-08-01 08:17:30 192.168.1.102 POST /login.php 302
2023-08-01 09:23:45 192.168.1.110 POST /submit_form.php 200
2023-08-01 10:45:12 192.168.1.115 POST /upload.php 500
Ahora, encontremos todas las solicitudes que resultaron en un estado 404 (No encontrado):
awk '$6 == "404" {print $1, $2, $5}' server_logs.txt
Este comando sigue el mismo patrón pero con valores diferentes:
- La condición
$6 == "404"
verifica si el sexto campo (código de estado) es igual a 404
- La acción
{print $1, $2, $5}
muestra solo campos específicos:
$1
- Primer campo (fecha)
$2
- Segundo campo (hora)
$5
- Quinto campo (recurso solicitado)
Esta impresión selectiva le permite centrarse solo en la información que necesita.
Salida:
2023-08-01 08:18:12 /products.html
2023-08-01 09:30:18 /nonexistent.html
2023-08-01 11:05:30 /missing_page.html
Puede combinar múltiples condiciones usando operadores lógicos:
&&
para AND (ambas condiciones deben ser verdaderas)
||
para OR (al menos una condición debe ser verdadera)
!
para NOT (niega una condición)
Por ejemplo, para encontrar todas las solicitudes POST que resultaron en un error (código de estado >= 400):
awk '$4 == "POST" && $6 >= 400 {print $0}' server_logs.txt
Estos filtros pueden ayudarlo a identificar rápidamente posibles problemas o actividades sospechosas en los registros de su servidor.