简介
AWK是一个强大的文本处理和数据分析工具,它可以处理数据、生成格式化报告,支持复杂的数据操作和计算。本指南将帮助您掌握AWK的各种用法,从基础文本处理到高级数据分析。
主要特点:
- 强大的文本分析能力
- 支持复杂的数学运算
- 内置多种函数
- 可以处理结构化数据
- 支持自定义函数和数组
基础用法
基本语法
awk 'pattern { action }' input-file
内置变量
变量 | 说明 | 示例 |
---|---|---|
$0 | 当前行的全部内容 | awk '{print $0}' file.txt |
$1, $2... | 当前行的第n个字段 | awk '{print $1}' file.txt |
NR | 当前行号 | awk '{print NR, $0}' file.txt |
NF | 当前行的字段数 | awk '{print NF}' file.txt |
基本操作
打印特定列:
awk '{print $1, $3}' file.txt
使用自定义分隔符:
awk -F: '{print $1}' /etc/passwd
条件过滤:
awk '$3 > 100 {print $0}' data.txt
高级特性
BEGIN和END块
awk 'BEGIN {print "开始处理..."}
{sum += $1}
END {print "总和:", sum}' data.txt
数组使用
统计词频:
awk '{count[$1]++} END {for (word in count) print word, count[word]}' file.txt
正则表达式
匹配特定模式:
awk '/pattern/ {print $0}' file.txt
替换文本:
awk '{gsub(/old/, "new"); print}' file.txt
内置函数
字符串函数
函数 | 说明 | 示例 |
---|---|---|
length() | 计算字符串长度 | awk '{print length($0)}' file.txt |
substr() | 提取子字符串 | awk '{print substr($1,1,3)}' file.txt |
split() | 分割字符串到数组 | awk '{split($0,arr,":")}' file.txt |
数学函数
基本计算:
awk '{print int($1), sqrt($2), sin($3)}' data.txt
实用案例
日志分析
统计HTTP状态码:
awk '{status[$9]++} END {for (code in status) print code, status[code]}' access.log
计算响应时间平均值:
awk '{sum+=$NF; count++} END {print "平均响应时间:", sum/count}' access.log
系统监控
内存使用分析:
ps aux | awk '{sum+=$4} END {print "总内存使用率:", sum"%"}'
磁盘使用统计:
df -h | awk 'NR>1 {print $5, $6}'
数据处理
CSV文件处理:
awk -F, '{sum[$1]+=$2} END {for (item in sum) print item, sum[item]}' data.csv
最佳实践
性能优化
优化建议:
- 使用合适的分隔符
- 避免不必要的正则表达式
- 处理大文件时使用管道
- 合理使用数组和缓存
代码可维护性
注意事项:
- 使用有意义的变量名
- 添加适当的注释
- 复杂逻辑使用函数封装
- 保持代码结构清晰
实用脚本模板
通用数据处理模板:
awk '
BEGIN {
FS=","; # 设置分隔符
print "开始处理...";
}
NR>1 { # 跳过标题行
# 数据处理逻辑
sum[$1] += $2;
}
END {
# 输出结果
for (key in sum) {
printf "%s: %.2f\n", key, sum[key];
}
}' data.csv