一、基础选项
1. 指定字段分隔符
选项 功能说明 示例与场景 来源
**-F fs** 设置输入字段分隔符(fs 可为字符串或正则表达式) awk -F: ‘{print $1}’ /etc/passwd 按冒号分隔 /etc/passwd 文件
2. 定义用户变量
选项 功能说明 示例与场景 来源
**-v var=value** 在脚本执行前定义变量 awk -v name=“Alice” ‘{print name,$0}’ data.txt 传递变量到脚本
3. 读取脚本文件
选项 功能说明 示例与场景 来源
**-f scriptfile** 从指定文件中读取 awk 脚本 awk -f process.awk input.txt 执行脚本文件
二、高级选项
1. 兼容模式与调试
选项 功能说明 示例与场景 来源
**-W compact** 启用紧凑模式(忽略扩展功能,兼容传统 awk) awk -W compact ‘{print $1}’ file
**-W traditional** 启用传统模式(完全兼容 Bell 实验室版 awk) awk -W traditional ‘{print $1}’ file
**-W lint** 检查代码兼容性问题 awk -W lint ‘{print $1}’ file
2. 内置变量与处理控制
选项 功能说明 示例与场景 来源
**-v 多变量赋值** 同时定义多个变量 awk -v a=10 -v b=20 ‘{print a+b}’ data.txt
BEGIN/END 块 在处理前/后执行代码块 awk ‘BEGIN{FS=“,”} {print $1}’ data.csv 设置分隔符并打印第一列
3. 输入输出控制
选项 功能说明 示例与场景 来源
**-v RS=“”** 将空行作为记录分隔符 awk -v RS=“” ‘{print $1,$2}’ data.txt 处理多行记录
**-v ORS=“\t”** 设置输出记录分隔符为制表符 awk ‘{print $1,$2}’ OFS=“\t” data.txt 输出以制表符分隔
**-v OFS=“\n”** 设置输出字段分隔符为换行符 awk ‘{print $1,$2}’ OFS=“\n” data.txt 每字段占一行
三、特殊功能选项
1. 正则表达式与模式匹配
选项 功能说明 示例与场景 来源
**~ / !~** 匹配/不匹配正则表达式 awk ‘$3 ~ /^202[3-4]/ {print}’ log.txt 匹配第三列以 2023/2024 开头的行
NR / NF 当前行号/字段数,用于条件判断 awk ‘NR>=3 && NR<=5 {print}’ file.txt 打印第3-5行
2. 处理多文件与管道输入
选项 功能说明 示例与场景 来源
管道输入 command awk '{print $1}'将前一个命令的输出作为awk
输入
多文件处理 awk ‘{print $1}’ file1 file2 同时处理多个文件
四、典型操作示例
1. 基础字段提取
bash
按逗号分隔并打印第一、三列
awk -F, ‘{print $1,$3}’ data.csv
引用来源:
2. 条件过滤与统计
bash
统计第三列大于 50 的行数
awk ‘$3>50 {count++} END {print count}’ data.txt
引用来源:
3. 格式化输出
bash
左对齐,宽度为 10 的字符串
awk ‘{printf “%-10s\n”, $1}’ data.txt
引用来源:
五、注意事项
权限问题
处理系统文件(如 /etc/passwd)需 root 权限或使用 sudo。
正则表达式转义
% 在 awk 中有特殊含义,需转义:awk ‘$3 ~ /202%/ {print}’。
脚本调试
使用 -v 选项调试变量:awk -v debug=1 ‘{print debug,$0}’。
性能优化
避免在循环内频繁修改 FS 或 OFS,建议在 BEGIN 块中初始化。
六、完整选项速查表
选项分类 选项列表 来源
基础操作 -F, -v, -f
高级功能 -W compact, -W traditional, -v RS=“”
输入输出 -v OFS=“\t”, -v ORS=“\n”
模式匹配 ~, !~, NR, NF
引用来源:
基础选项与示例:
高级选项与调试:
输入输出控制:
正则表达式与模式匹配: