Bash スクリプトで Apache ログを分析する

Bash スクリプトで Apache ログを分析する

このスクリプトについて助けが必要です。このスクリプトは、filter.txt を通じて apache_access.log を分析します。フィルターに用語が存在する場合、スクリプトは何かを行います。私の問題は、最初のコマンド「for」にあると思います。行ごとにフィルターを使用することができません。

誰か助けてくれませんか?

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

答え1

あなた読みたくないforwhile代わりにand を使用してくださいread。問題は、シェルが空白で引数を分割するため、ログ ファイルの行にスペースがあると、ループがもう一度実行されることです。

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

内側のループに対して同じパターンを繰り返します。

関連情報