目录
- 简介
- AWK 的主要特性
- 基本语法
- 示例
- 1. 打印文件的所有行
- 2. 打印特定字段
- 3. 打印匹配模式的行
- 4. 基于条件过滤并打印
- 5. 使用内置变量
- 6. 执行算术运算
- 7. 字符串操作
- 8. 使用 BEGIN 和 END 块
- 9. 处理分隔符文件
- 高级功能
- 自定义脚本
- 使用外部变量
- 总结
简介
AWK 是 Linux 中功能强大的文本处理工具,用于模式扫描和处理。AWK 以其创建者(Aho、Weinberger 和 Kernighan)的名字命名,特别适合处理如日志、CSV 文件或配置文件等结构化文本数据。本指南全面讲解了 AWK 的功能,并通过实际示例展示其强大之处。
AWK 的主要特性
- 模式匹配:处理文件中符合特定模式的行。
- 字段操作:轻松访问和操作结构化文本中的特定字段。
- 算术运算:在命令中直接执行计算。
- 内置函数:支持字符串处理、数学运算等多种功能。
- 可移植性:适用于大多数类 Unix 系统。
基本语法
awk 'pattern {action}' filename
- pattern:决定是否对某行执行动作的条件。
- action:指定对匹配行执行的代码块。
- filename:要处理的输入文件。
示例
1. 打印文件的所有行
awk '{print}' file.txt
此命令打印 file.txt
的所有行。{print}
操作适用于每一行。
2. 打印特定字段
AWK 使用 $1
、$2
等表示一行中的字段。
awk '{print $1, $3}' file.txt
打印 file.txt
每行的第一和第三字段。
3. 打印匹配模式的行
awk '/pattern/' file.txt
打印包含“pattern”的行。
4. 基于条件过滤并打印
awk '$3 > 50 {print $1, $3}' file.txt
打印第三字段大于 50 的行的第一和第三字段。
5. 使用内置变量
- NR:当前记录(行)的编号。
- NF:当前记录中的字段数量。
awk '{print NR, NF, $0}' file.txt
打印行号、字段数和整行内容。
6. 执行算术运算
awk '{sum += $3} END {print "Total:", sum}' file.txt
计算并打印所有行的第三字段的总和。
7. 字符串操作
awk '{print toupper($1)}' file.txt
将每行的第一个字段转换为大写。
8. 使用 BEGIN 和 END 块
awk 'BEGIN {print "Start Processing"} {print $0} END {print "End Processing"}' file.txt
BEGIN
块在处理任何行之前执行。END
块在处理完所有行后执行。
9. 处理分隔符文件
默认情况下,AWK 使用空格分割字段。可以使用 -F
指定自定义分隔符。
awk -F ',' '{print $1, $3}' file.csv
处理 CSV 文件并打印第一和第三字段。
高级功能
自定义脚本
将 AWK 脚本保存到文件中以便重复使用:
script.awk:
BEGIN {print "Name Score"}
$3 > 60 {print $1, $3}
END {print "Processing Complete"}
运行脚本:
awk -f script.awk file.txt
使用外部变量
通过 -v
标志将变量传递给 AWK:
awk -v threshold=50 '$3 > threshold {print $1, $3}' file.txt
总结
AWK 是一个功能强大的文本处理工具,对于在 Linux 上处理数据的人来说至关重要。其简单性与强大功能的结合,使其在从简单的文本提取到复杂的数据转换的任务中都表现出色。