最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Linux 如何使用 awk 统计日志中特定列的和
时间:2026-09-02 19:31:49 编辑:袖梨 来源:一聚教程网
用awk统计日志某列之和,需先确认分隔符与目标列号,再用{sum+=$n}累加,END{print sum}输出;支持条件筛选、正则校验及多分隔符处理。
用 awk 统计日志中某列的和,核心是让 awk 逐行读取、提取目标字段,再累加。关键是明确列号(或分隔符)和过滤条件。
确认日志字段分隔符和目标列号
多数日志用空格、制表符或特定字符(如 |、,)分隔。先用 head -n 1 日志文件 看首行,再用 awk -F' ' '{print NF; print $1,$2,$3}' 文件 | head -1 快速观察字段数和内容。比如 Nginx 默认日志中字节数通常在第10列,Apache 可能在第9列。
基础求和:直接累加指定列
假设日志以空格分隔,要统计第5列的数值总和:
awk '{sum += $5} END {print sum}' access.log
说明:
- $5 表示每行第5个字段
- sum += $5 每行自动累加
- END 块在处理完所有行后执行,只输出一次结果
- 若该列含非数字(如“-”或“-”表示缺失),awk 会按0处理;如需跳过,加判断:
awk '$5 != "-" && $5 != "" {sum += $5} END {print sum}' access.log- 更稳妥写法:
awk '$5 ~ /^[0-9]+$/ {sum += $5} END {print sum}' access.log(仅匹配纯数字)
带条件筛选后再求和
例如只统计状态码为 200 的响应字节数(假设字节数在第10列,状态码在第9列):
awk '$9 == 200 {sum += $10} END {print sum}' access.log
也可组合多个条件:
awk '$9 == 200 && $10 > 0 {sum += $10} END {print sum}' access.log- 按时间范围:比如第4列是
[10/Jan/2024:14:这类时间,提取小时并统计某小时的请求数:awk -F'[:[ ]' '$5 == 14 {count++} END {print count}' access.log(这里用-F'[:[ ]'同时以:、[、空格切分,第5段即小时)
处理 CSV 或其他分隔符日志
若日志是逗号分隔(CSV),需显式指定分隔符:
awk -F',' '{sum += $3} END {print sum}' data.csv
注意:若 CSV 含引号包裹的字段(如 "a,b",c,100),标准 awk 不解析引号,此时建议先用 csvkit 或改用 gawk 配合 FPAT,但简单场景下可先用 sed 预处理,例如删引号:sed 's/"//g' file.csv | awk -F',' '{sum += $3} END {print sum}'
相关文章
- 洛克王国天火废墟在什么位置 09-02
- Redis 性能测试 09-02
- Redis 客户端连接 09-02
- TPLink TLWR2041+ 无线路由器映射服务器操作指导 09-02
- Redis 管道技术 09-02
- 实况足球2016手机版下载 实况足球2016安卓下载地址 09-02