开发者社区> 问答> 正文

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

有没有什么命令可以做这样一件事
把access log里的ip统计出来,每个ip的数量,然后按照数量倒序排列

展开
收起
a123456678 2016-06-16 11:10:45 1967 0
1 条回答
写回答
取消 提交回答
  • 以下的方式速度都会卡在sort上面,数量越多越麻烦。
    Shell方法:

    grep -i -o -E -r -e "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log | sort -n | uniq -c | sort -n
    awk方法:
    如果是accesslog 格式应该是固定的 会简单些。因为awk做排序也比较的郁闷,所以暂时用sort吧。
    
    awk '{if ($1 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/){ip[$1]++}}END{for(i in ip){print ip[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 (i in seg) {
    print i"\t"seg[i];
    } 
    }

    Notice:对于量小的log以上的方法都可以,但是涉及到真的大的log,就会需要考虑其它的方式了。

    2019-07-17 19:40:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载