awk 数据统计与格式化:日志分析、报表生成
awk 是强大的文本处理语言,适合结构化数据。
1. 基础字段处理
# 打印第1列和第3列
awk '{print $1, $3}' data.txt
# 打印所有行($0)
awk '{print $0}' data.txt
# 以指定分隔符(-F)
awk -F: '{print $1, $6}' /etc/passwd2. 条件过滤
# 打印第2列大于100的行
awk '$2 > 100' data.txt
# 匹配正则
awk '/ERROR/ {print $0}' app.log
# 条件组合
awk '$3 == "404" && $4 > 1000' access.log3. 统计与聚合
# 计算总和
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.txt4. 格式化输出
# 使用 printf 格式化
awk '{printf "%-10s %5d\n", $1, $2}' data.txt
# 添加表头
awk 'BEGIN {print "Name\tScore"} {print $1"\t"$2}' data.txt5. 内置变量
NR:当前行号NF:当前字段数FS:输入分隔符OFS:输出分隔符
# 输出行号和字段数
awk '{print NR, NF, $0}' file.txt6. 实战:nginx 日志分析
# 统计每个 IP 的访问次数
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
# 统计状态码分布
awk '{print $9}' access.log | sort | uniq -c | sort -nr 