概述
awk 读取输入为记录(默认:行),通过字段分隔符(FS)分割,然后应用模式/动作 { ... } 以所需的输出(OFS)导出。常见用途包括列提取、条件过滤、求和/平均值计算、格式转换等。
主要内置变量
控制输入/输出操作和格式的代表性内置变量。
- NR: 到目前为止读取的记录(行)号
- FNR: 当前文件中的记录号
- NF: 当前记录的字段数量
- FS: 输入字段分隔符(默认空格)
- OFS: 输出字段分隔符(默认空格)
- RS: 记录分隔符(默认换行符)
- ORS: 输出记录分隔符(默认换行符)
基本形式
awk '模式 { 动作 }' input.txt
awk -f program.awk input.txt
在一行中传递模式/动作块,或使用 -f 传递脚本文件。
主要选项
按场景分组了工作中常用的选项。包括 gawk 兼容选项。
1) 基本执行/输入
2) 字段/变量传递
3) 调试/兼容性(gawk)
4) 帮助/版本
生成的命令:
请尝试组合命令。
描述:
`awk` 执行命令。
通过组合这些选项,您可以与 AI 一起虚拟地执行命令。
常用模式
列提取
awk -F ':' '{ print $1, $3 }' /etc/passwd
只输出由冒号分隔的第1、第3个字段
条件过滤
awk '$5 > 100 { print }' data.tsv
只输出第5个字段值大于100的记录
聚合示例
awk '{ sum += $2 } END { print sum }' data.txt
第二个字段求和
变量传递和格式
awk -v OFS=',' '$1=="KEY" { print $1, $2, $3 }' input.txt
将 OFS 指定为逗号并只输出特定键
实战技巧
由于是逐行流处理,与管道结合使用非常强大。
- 字段分隔符可使用正则表达式: -F '[,:\t]+'
- 可通过多个 -e 分段编写程序
- 长脚本可使用 -f 分离并用 git 进行版本管理
- 输出格式可适当调整 OFS/ORS
- 大容量输入时,只保留最少必要操作并简化管道