Ubuntu下如何统计Apache access.log指定日期按分钟去重IP数量?
Ubuntu Apache access.log 按分钟统计独立IP数量方案
可用命令
直接执行以下命令即可得到你需要的输出:
grep "06/Sep/2021" access.log | awk '{split($4, t, /\[|:/); time_str = t[2]":"t[3]; unique_key = $1"|"time_str; if (!visited[unique_key]++) {ip_count[time_str]++}} END {for (tm in ip_count) print ip_count[tm], tm}' | sort -k 2
如需统计其他日期,仅需替换grep指令中引号内的日期字符串即可。
命令逻辑说明
- 先通过grep过滤出指定日期的日志行,缩小后续处理范围
- awk拆分每条日志的时间字段,提取
时:分格式的时间片段 - 构造
IP|分钟时间的唯一标识,同一IP同一分钟只会被计数一次 - 统计完所有日志后输出每个分钟对应的独立IP数,最后按时间排序保证输出顺序正确
原有自写命令问题
你原来的实现用while循环反复grep全量日志文件,日志体积较大时执行效率会非常低,且如果日志中存在其他日期的相同时间片段,会导致统计结果错误。
内容的提问来源于stack exchange,提问作者eSpox
相关产品推荐
相关产品推荐

