El script Bash analiza el registro de Apache

El script Bash analiza el registro de Apache

Necesito ayuda con este script. Este script analiza apache_access.log a través de un filter.txt, si existe el término en el filtro, el script hará algo. Creo que mi problema está en el primer comando "para", no puedo usar el filtro línea por línea.

¿alguien me puede ayudar?

for term  in `tail -n $LINESTOSEARCH $IPEATERFILTER`
do
    for ip in `tail -n $LINESTOSEARCH $LOGFILE | grep "$TERM" | awk "{print \\$1}" | sort | uniq -c | sort -rn | head -20 | awk "{if (\\$1 > $THRESHOLD) print \\$2}"`
    do
        # Look in iptables to see if this IP is already banned
        if ! iptables -L INPUT -n | grep -q $ip
        then



     # Do something



 fi

    done
done

Respuesta1

No quiero leer líneas confor. Utilice whiley readen su lugar. El problema es que el shell dividirá los argumentos en espacios en blanco, por lo que cualquier espacio en la línea del archivo de registro hará que el bucle se ejecute en otro momento.

tail -n $LINESTOSEARCH $IPEATERFILTER | while read -r line; do
    # do something with "$line"
done

Repita el mismo patrón para los bucles internos.

información relacionada