Script Bash analisa log do Apache

Script Bash analisa log do Apache

Preciso de ajuda com esse script Este script analisa o apache_access.log através de um filter.txt, se existir o termo em filter o script fará alguma coisa. Meu problema acho que está no primeiro comando "for", não estou conseguindo usar o filtro linha por linha.

alguém pode me ajudar?

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

Responder1

Vocênão quero ler linhas comfor. Use whilee readem vez disso. O problema é que o shell dividirá os argumentos em espaços em branco, portanto, qualquer espaço na linha do arquivo de log fará com que o loop seja executado novamente.

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

Repita o mesmo padrão para os loops internos.

informação relacionada