AWK 简介
AWK 是一个强大的文本处理工具,也是一门编程语言。它得名于其创始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏首字母。AWK 主要用于:
- 文本处理
- 数据提取
- 报表生成
- 数据分析
基本语法
1 | awk [选项] 'pattern {action}' 输入文件 |
AWK 工作原理
AWK 按行处理文本:
- 读入一行内容
- 将行按分隔符分割成字段
- 对每个字段执行指定操作
内置变量
常用内置变量:
$0
: 当前整行内容$1
-$n
: 当前行的第n个字段NF
: 当前行的字段数NR
: 当前处理的行号FS
: 输入字段分隔符(默认是空格)OFS
: 输出字段分隔符RS
: 输入记录分隔符(默认是换行符)ORS
: 输出记录分隔符
基础示例
1. 打印特定列
1 | # 文件内容 (data.txt): |
2. 使用自定义分隔符
1 | # 文件内容 (data.csv): |
3. 条件过滤
1 | # 打印工资大于5500的记录 |
进阶用法
1. BEGIN 和 END 块
1 | # 添加表头和汇总信息 |
2. 内置函数使用
字符串函数
1 | # length(): 计算字符串长度 |
数学函数
1 | # int(): 取整 |
3. 条件和循环
if 语句
1 | awk '{ |
for 循环
1 | # 计算每行各个字段的和 |
4. 数组使用
1 | # 统计每个工资等级的人数 |
实用示例
1. 日志分析
1 | # 分析 Apache 访问日志,统计访问量最大的 IP |
2. CSV 文件处理
1 | # 计算 CSV 文件中某列的平均值 |
3. 文本格式化
1 | # 格式化输出表格 |
4. 数据提取和转换
1 | # 将数据转换为 JSON 格式 |
性能优化技巧
- 使用
next
语句跳过不需要处理的行
1 | awk '$3 < 5000 { next } { print $0 }' data.txt |
- 预编译正则表达式
1 | awk 'BEGIN { pattern = "^[A-Z]" } |
注意事项
- 字段分隔符设置要注意转义
- 大文件处理时注意内存使用
- 复杂运算考虑使用其他工具配合
- 注意数据类型的隐式转换
总结
AWK 是一个强大的文本处理工具,它的优势在于:
- 简洁的语法
- 强大的文本处理能力
- 灵活的编程特性
- 丰富的内置函数
掌握 AWK 可以大大提高文本处理效率,特别是在处理日志、数据分析等场景下。