Arrays 从bash计算日志中的ip重复次数
从日志中通过特定搜索重复IP可以看出bash 举例来说:Arrays 从bash计算日志中的ip重复次数,arrays,regex,bash,multidimensional-array,Arrays,Regex,Bash,Multidimensional Array,从日志中通过特定搜索重复IP可以看出bash 举例来说: #!/bin/bash # Log line: [Sat Jul 04 21:55:35 2015] [error] [client 192.168.1.39] Access denied with status code 403. grep "status\scode\s403" /var/log/httpd/custom_error_log | while read line ; do pattern='^\[.*?\]
#!/bin/bash
# Log line: [Sat Jul 04 21:55:35 2015] [error] [client 192.168.1.39] Access denied with status code 403.
grep "status\scode\s403" /var/log/httpd/custom_error_log | while read line ; do
pattern='^\[.*?\]\s\[error\]\s\[client\s(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\].*?403'
[[ $line =~ $pattern ]]
res_remote_addr="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.${BASH_REMATCH[3]}.${BASH_REMATCH[4]}"
echo "Remote Addr: $res_remote_addr"
done
我需要知道的最终结果获得了几次403 ip的每条消息,如果可能的话,排序从高到低
通过示例输出:
200.200.200.200 50 times.
200.200.200.201 40 times.
200.200.200.202 30 times.
... etc ...
我们需要从apache的每月日志中创建一个html报告,该报告包含一系列事件(如awstats)。有更好的方法。以下是我的建议,应该更易于阅读和维护:
grep -P -o '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' log_file | sort | uniq -c | sort -k1,1 -r -n
输出的形式应为:
count1 ip1
count2 ip2
更新:
仅筛选403:
grep -P -o '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=.*403)' log_file | sort | uniq -c | sort -k1,1 -r -n
请注意,预先查看就足够了。如果日志文件的格式与前面提到的格式相同,最好使用
awk
过滤掉所需的状态代码,并仅输出IP。然后使用uniq
命令统计每次发生的次数:
awk'/code 403/{print$8}error.log | sort | uniq-c | sort-n
在awk
中,我们通过regexp/code 403/
进行过滤,然后为匹配行打印第8个值(值用空格分隔),即IP
然后我们需要对输出进行排序,以便相同的IP一个接一个-这是uniq
程序的要求
uniq-c
只打印一次输入中的每个唯一行,前面是出现的次数。最后,我们对该列表进行数字排序,以获得按计数排序的IP
样本输出(第一个是发生次数,第二个是IP):
1.1.1.110.2.2.2.2
12.3.3.3.3
类似于
awk'/code 403/{print$8}error.log | sort | uniq-c | sort-n
?如果它适合你,我可以写它作为一个解释它到底做什么的答案…但日志有状态代码200和403,只需要403状态,如何匹配只…*(ip)。*?使用条件$1、$2?40秒处理1GB日志文件:D@WHK对不起,我打错了。关于状态代码,我不确定日志格式,所以我不能真正澄清这一点。但如果你愿意,你可以申请“向后看”或“向前看”。这不是确切的格式,我只需要解决这个例子,让其他人唯一地获得相同的日志数据,实际的格式要长得多,也要复杂得多:,像这样输出日志:,我想创建一个脚本,在html报告中反映数据,但上面的例子足以让我走自己的路。