Tenga presente que para utilizar Arrays Asociativos de tener instalado versión de BASH desde versión 4.0
En el siguiente SCRIPT buscaremos todos los RUTs Chilenos que aparezcan en el archivo LOG, y al finalizar entregara un resumen con la cantidad de veces que apareció cada RUT en el archivo 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 26 27 |
#!/bin/bash # Declarar una matriz asociativa declare -A rut_count # Ruta al archivo de log log_file="/junita/log/server.log" # Expresion regular para identificar el RUT (Ejemplo simple: 12345678-9) regex="([0-9]{7,8}-[0-9K])" # Leer el archivo linea por linea while IFS= read -r line; do # Buscar el RUT en la linea if [[ $line =~ $regex ]]; then rut="${BASH_REMATCH[0]}" # Incrementar el contador para el RUT ((rut_count["$rut"]++)) fi done < "$log_file" # Mostrar los resultados echo "Conteo de RUTs:" for rut in "${!rut_count[@]}"; do echo "RUT: $rut - Cantidad: ${rut_count[$rut]}" done |
El resultado de la ejecución del SCRIPT, sería mas o menos así :
1 2 3 4 5 6 7 |
RUT: 77506644-6 - Cantidad: 67 RUT: 77551513-9 - Cantidad: 126 RUT: 26830665-2 - Cantidad: 6781 RUT: 17102848-7 - Cantidad: 34 RUT: 18820695-2 - Cantidad: 234 RUT: 76159425-3 - Cantidad: 166 RUT: 76079962-4 - Cantidad: 189 |
Misma situación para para buscar Direcciones IP en un archivo LOG y entregar un resumen al final con las direcciones IP y la cantidad de veces que aparece en el archivo LOG :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/bash log_file="/sist_appl/appl-sist.log" declare -A ip_count while IFS= read -r line; do if [[ $line =~ client\ ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+): ]]; then ip="${BASH_REMATCH[1]}" ((ip_count["$ip"]++)) fi done < "$log_file" echo "Resumen de direcciones IP:" for ip in "${!ip_count[@]}"; do echo "$ip: ${ip_count[$ip]}" done |
Al ejecutarlo nos entregaría como resultado, algo así :
1 2 3 4 5 6 |
122.25.103.150 : 43 16.110.101.104 : 23 29.146.120.191 : 12 18.167.184.208 : 12 29.114.120.153 : 123 29.112.120.152 : 61 |