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.