过滤access.log以返回每个客户端的唯一IP地址列表和成功请求数(代码200)的有效方法是什么?

 爱得书签_902 发布于 2023-02-13 18:31

我正在寻找一种方法来获取access.log格式,如下所示

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gig HTTP/1.0" 404 201
127.0.0.1 - frank [10/Oct/2000:13:56:40 -0700] "GET /apache_pb.gif HTTP/1.0" 200 1406
127.0.0.1 - frank [10/Oct/2000:13:57:45 -0700] "GET /apache_pb.gif HTTP/1.0" 200 5325
127.0.0.1 - frank [10/Oct/2000:13:58:16 -0700] "GET /apache_pb.gif HTTP/1.0" 200 35292
127.0.0.3 - jerry [10/Oct/2000:13:59:12 -0700] "GET /apache_pb.gif HTTP/1.0" 200 863

并编写一个返回格式如下的结果的脚本:

127.0.0.1       3
127.0.0.3       1

脚本的规则很简单,它应该计算每个唯一IP地址记录成功访问请求的次数(代码200).

我完全愿意在bash之外做这件事.我只是觉得用grep,sort和uniq开始可能更容易.我遇到的主要问题是输出uniq -c的格式错误.uniq一直列出输出如下:

3  127.0.0.1
1  127.0.0.3

不幸的是,我无法做到这一点.任何帮助都非常感谢.谢谢!

1 个回答
  • 用awk:

    awk '$(NF -1) == 200 {arr[$1]++}END{for (a in arr) print a, arr[a]}' access.log
    

    稍微分解一下:

    $(NF -1):awk默认情况下,在空格(或制表符等)上拆分当前行,并且NF是列数,所以NF -1是右边的第二列,我们测试它的值是否为200

    如果它是200,那么我们arr用IP地址作为关键字增加关联数组($1:第一列)

    @最后,我们打印每一条成功的线

    2023-02-13 18:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有