awk+sort+uniq组合统计异常:如何按域名统计DNS日志?
解决DNS日志按域名合并统计请求/回复次数的问题
你遇到的问题核心是日志中域名字段附带了端口号,导致相同域名因端口不同被uniq当成独立条目统计。只需要在awk处理阶段剥离端口号,再进行统计即可。
修改后的命令
awk '/DNSHandler:ProxyResolver\] Request|Reply/ { sub(/:.*/, "", $8) # 去掉域名字段中冒号及后面的端口部分 print $5, $8 }' file.log | sort | uniq -c | sort -r
命令说明
- 剥离端口:用
sub(/:.*/, "", $8)匹配$8字段中第一个冒号到结尾的内容(即端口部分),并替换为空,只保留纯域名。 - 输出关键信息:打印操作类型(
Request/Reply)和处理后的纯域名。 - 排序去重统计:
sort将相同条目聚合,uniq -c统计出现次数,最后sort -r按次数降序排列结果。
更灵活的分组统计方式
如果需要按域名归类,同时清晰展示请求和回复次数,可以用awk直接完成统计分组:
awk '/DNSHandler:ProxyResolver\] Request|Reply/ { sub(/:.*/, "", $8) count[$8, $5]++ } END { for (key in count) { split(key, item, SUBSEP) printf "%-20s %-10s %d\n", item[1], item[2], count[key] } }' file.log | sort -k1,1
输出格式示例:
www.bing.com Request 2 www.bing.com Reply 3 google.com Request 5
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

