Script Bash analisa o log do apache

0

Preciso de ajuda com este script Este script analisa apache_access.log através de um filter.txt, se existir o termo em filter o script fará alguma coisa. Meu problema eu acho que é 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
    
por Rui Branco 09.07.2014 / 16:11

1 resposta

1

Você não precisa ler as linhas com for . Use while e read . O problema é que o shell irá dividir os argumentos no espaço em branco, portanto, qualquer espaço na linha do arquivo de log fará com que o loop seja executado em outro momento.

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

Repita o mesmo padrão para loops internos.

    
por 09.07.2014 / 16:16

Tags