Bash腳本分析apache日誌

Bash腳本分析apache日誌

我需要有關此腳本的幫助此腳本透過filter.txt 分析apache_access.log,如果filter 中存在術語,則腳本將執行某些操作。我認為我的問題是在第一個命令“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

不想讀行for。使用whileandread代替。問題是 shell 會根據空格分割參數,因此日誌檔案行中的任何空格實際上都會導致循環再次運行。

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

對內循環重複相同的模式。

相關內容