欢迎来到程序员中文网!

首页 Linux Mysql C++ Python PHP JavaScript 资源下载 动态 开源推荐
我要投稿 投诉建议

awk 数据统计与格式化:日志分析、报表生成

时间:2026年08月12日 05:26:48 浏览:1

awk 数据统计与格式化:日志分析、报表生成


awk 是强大的文本处理语言,适合结构化数据。


1. 基础字段处理


# 打印第1列和第3列
awk '{print $1, $3}' data.txt

# 打印所有行($0)
awk '{print $0}' data.txt

# 以指定分隔符(-F)
awk -F: '{print $1, $6}' /etc/passwd

2. 条件过滤


# 打印第2列大于100的行
awk '$2 > 100' data.txt

# 匹配正则
awk '/ERROR/ {print $0}' app.log

# 条件组合
awk '$3 == "404" && $4 > 1000' access.log

3. 统计与聚合


# 计算总和
awk '{sum += $2} END {print sum}' numbers.csv

# 计算平均值
awk '{sum += $2; count++} END {print sum/count}' numbers.csv

# 分组统计(按第1列分组求和第2列)
awk '{arr[$1] += $2} END {for (i in arr) print i, arr[i]}' data.txt

4. 格式化输出


# 使用 printf 格式化
awk '{printf "%-10s %5d\n", $1, $2}' data.txt

# 添加表头
awk 'BEGIN {print "Name\tScore"} {print $1"\t"$2}' data.txt

5. 内置变量



  • NR:当前行号

  • NF:当前字段数

  • FS:输入分隔符

  • OFS:输出分隔符


# 输出行号和字段数
awk '{print NR, NF, $0}' file.txt

6. 实战:nginx 日志分析


# 统计每个 IP 的访问次数
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10

# 统计状态码分布
awk '{print $9}' access.log | sort | uniq -c | sort -nr