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

不想读for。改用whileand read。问题是 shell 会根据空格来分割参数,因此日志文件行中的任何空格实际上都会导致循环再运行一次。

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

对内循环重复相同的模式。

相关内容