为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过命令行统计和排列访问日志里的ip数

如何通过命令行统计和排列访问日志里的ip数

慕姐8265434 2019-03-29 11:00:28
有没有什么命令可以做这样一件事把accesslog里的ip统计出来,每个ip的数量,然后按照数量倒序排列
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

以下的方式速度都会卡在sort上面,数量越多越麻烦。
Shell方法:grep-i-o-E-r-e"([0-9]{1,3}\.){3}[0-9]{1,3}"access.log|sort-n|uniq-c|sort-nawk方法:
如果是accesslog格式应该是固定的会简单些。因为awk做排序也比较的郁闷,所以暂时用sort吧。awk'{if($1~/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/){ip[$1]++}}END{for(iinip){printip[i],"\t",i}}'|sort-n如果是无序的没有规律的格查找ip,可以参考下面这段代码,可能还有需要优化的地方,像正则就不能够这样写。/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/{s=$0;idx=1;for(;;){idx=match(s,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/,a);if(idx==0){break;}seg[a[0]]++;s=substr(s,idx+1);}}
END{
for(iinseg){
printi"\t"seg[i];
}
}Notice:对于量小的log以上的方法都可以,但是涉及到真的大的log,就会需要考虑其它的方式了。
                            
查看完整回答
反对 回复 2019-03-29
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

1、首先注意在日志文件中,可能会出现包含了访问源的IP地址和目标IP地址,应注意需要统计的是前者或者后者,排除掉不需要统计的地址。
以统计的IP地址在第1列为例:awk'{print$1}'web.log
2、下面以apache的访问日志为例:
awk'{print$1}'web.log|grep-E"([0-9]{1,3}\.){3}[0-9]{1,3}"|sort|uniq-c|sort-g1192.168.10.15
1192.168.1.129
1192.168.1.19
3192.168.1.29
4192.168.1.139
6192.168.10.5
7192.168.1.9
29192.168.1.119
3、如果是access.log的格式,IP地址是固定在某列,用Awk的数组,速度是最快的:
awk'{aaa[$1]++;}END{for(iinaaa){printf("%s\t%s\n",aaa[i],i);}}'./access.log|sort-bn
                            
查看完整回答
反对 回复 2019-03-29
  • 2 回答
  • 0 关注
  • 484 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信