Este scripts BASH lee un archivo de LOG y contabiliza las direcciones IP encontradas. Al final muestra un resumen con el total de apariciones de cada Dirección IP encontrada en el archivo de LOG :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/bin/bash # Nombre del archivo de registro logfile="archivo.log" # Array asociativo para almacenar las direcciones IP y sus conteos ip_counts=([ ]="0") # Leer el archivo de registro línea por línea while IFS= read -r line; do # Buscar direcciones IP en cada línea usando expresiones regulares if [[ $line =~ ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) ]]; then ip=${BASH_REMATCH[1]} # Incrementar el conteo para la dirección IP encontrada ip_counts[$ip]=$((ip_counts[$ip]+1)) fi done < "$logfile" # Imprimir el resumen de las direcciones IP y sus conteos echo "Resumen de direcciones IP:" echo "--------------------" for ip in "${!ip_counts[@]}"; do echo "$ip: ${ip_counts[$ip]}" done |
Explicación del script:
#!/bin/bash
: Línea shebang que especifica que el script debe ejecutarse con bash.logfile="archivo.log"
: Variable que contiene el nombre del archivo de registro. Cambia «archivo.log» por el nombre de tu archivo.ip_counts=([ ]="0")
: Inicializa un array asociativo llamadoip_counts
. La clave es la dirección IP y el valor es el conteo (inicializado en 0).while IFS= read -r line
: Bucle que lee el archivo de registro línea por línea.if [[ $line =~ ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) ]]
: Expresión regular que busca direcciones IP en cada línea. Ajusta la expresión regular si tus direcciones IP tienen un formato diferente.ip=${BASH_REMATCH[1]}
: Asigna la dirección IP encontrada a la variableip
.ip_counts[$ip]=$((ip_counts[$ip]+1))
: Incrementa el conteo para la dirección IP en el array asociativo.for ip in "${!ip_counts[@]}"
: Bucle que itera sobre las claves del array asociativo (las direcciones IP).echo "$ip: ${ip_counts[$ip]}"
: Imprime la dirección IP y su conteo.