直接用 awk + sort + uniq 三步提取 top 10 页面:先用 awk '{print $7}' 提取 apache 日志中第 7 列 uri 路径,再 sort 排序、uniq -c 计数、sort -nr 倒序、head -10 截取;可加 grep 过滤静态资源或 sub 归一化路径,支持 tail 或时间筛选提升实用性。

直接用 awk + sort + uniq 三步就能快速提取访问量最高的 Top 10 页面,核心是准确抓取日志中代表请求路径的字段(通常是第 7 列)。
确认日志格式,找准页面路径字段
Apache 默认日志格式(Common Log Format)中,请求的 URI 位于每行第 7 个字段(即 $7),例如:
这里 /product/detail?id=123 就是你要统计的页面路径。如果自定义过日志格式(如用了 %U%q 合并路径和参数),需按实际调整字段编号或改用 awk -F 指定分隔符。
执行命令提取 Top 10 页面
运行以下命令(假设日志路径为 /var/log/apache2/access.log):
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
awk '{print $7}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10
说明:
-
awk '{print $7}':只输出每行第 7 列(URI 路径) -
sort:为去重做准备,把相同路径排在一起 -
uniq -c:合并重复行并计数,输出形如1245 /api/v1/users -
sort -nr:按数字倒序排列(最高频在前) -
head -10:只取前 10 条
排除干扰,聚焦真实热门页面
原始结果常含静态资源(如 .js、.css、/favicon.ico),若想专注动态页面或业务接口,可加过滤:
- 跳过常见静态后缀:
awk '{print $7}' access.log | grep -v '\.\(js\|css\|png\|jpg\|gif\|ico\)$' | sort | uniq -c | sort -nr | head -10 - 只统计 API 路径:
awk '{print $7}' access.log | grep '^/api/' | sort | uniq -c | sort -nr | head -10 - 排除带查询参数的变体(归一化路径):
awk '{sub(/\?.*$/, "", $7); print $7}' access.log | sort | uniq -c | sort -nr | head -10
按时间范围分析更实用
全量日志可能掩盖突发热点。建议结合 tail 或时间筛选:
- 看最近 1 万行中的热门页:
tail -10000 access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -10 - 查今天某小时的峰值路径:
awk '$4 ~ /21\/Aug\/2026:01:/ {print $7}' access.log | sort | uniq -c | sort -nr | head -10
不复杂但容易忽略










