Linux gawk 命令 - GNU 版 awk 文本处理和分析工具
• 最后修改:2025-09-05 • 阅读量:191
gawk ( GNU AWK ) 是 AWK 文本处理工具的 GNU 实现版本,它在 awk 工具的基本功能(对结构化文本进行分析、内容提取和转换)的基础上增强了其文本处理和数据提取能力。它能够基于正则表达式处理文本流,并支持复杂字段操作和计算等。
本文将为你介绍 gawk
命令的使用方法,使你对 gawk
命令具有基本的了解,方便你使用该工具处理文本数据。
相关工具对比
特性 | awk | gawk | nawk | mawk |
---|---|---|---|---|
实现 | 基础标准 | GNU 增强版本 | 新版的 AWK | 简易的实现 |
性能 | 标准 | 高度优化 | 较好 | 最快 |
默认系统 | 到预装版本的链接 | RHEL 系预装 | FreeBSD 预装 | Debian 系预装 |
gawk 命令语法结构
如下给出 gawk
命令的基本语法结构:
gawk [选项] '模式 { 动作 }' 文件...
gawk [选项] -f 脚本文件 文件...
语法结构中组成部分的解释:
- 模式:行匹配条件(可以使用正则或表达式等)
- 动作:模式匹配后执行的命令(用
{}
包裹,还可以另外包含”BEGIN{}
:初始处理代码块,END{}
:结束处理代码块“) - 文件:用来读取内容的文件(文件中字段默认的分隔符为空白字符[空格、Tab])
可以使用的其他符号:
RS
:记录分隔符(默认\n
)FS
:字段分隔符(默认空格)OFS
:输出字段分隔符
系统安装指南
gawk 是 GNU 版本的 awk,在没有预装 gawk
的系统中也包含 gawk 软件包。
Debian / Ubuntu 系统
在 Debian / Ubuntu 系统上使用如下命令安装 gawk 命令:
sudo apt update && sudo apt install gawk -y
RHEL / AlmaLinux 系统
在 RHEL / AlmaLinux / Rocky Linux 系统上已经预装了 gawk 命令。
FreeBSD 系统
在 FreeBSD 系统上使用如下命令安装 gawk 命令:
sudo pkg update
sudo pkg install gawk
gawk 命令使用示例
如下的示例中没有使用特定数据的话,就使用如下的 product.txt
文本中的数据:
2025-09-01,P001,12,99.9,0.95
2025-09-01,P002,8,159.5,0.9
2025-09-01,P003,23,49.9,1.0
2025-09-02,P001,15,99.9,0.95
字段对应的统一名称为:日期 产品ID 销量 单价 折扣率
1. 基本字段处理
该示例使用如下的数据:
2025-09-01 P001 12 99.9 0.95
2025-09-01 P002 8 159.5 0.9
如下动作中使用 print
输出特定的字段:
gawk '{print $2, $4*1.1}' product.txt
输出内容为:
P001 109.89
P002 175.45
文件字段的默认分隔符为空白符(空格、Tab)
如上的示例:没有没有给出模式,动作使用 print 输出第二个字段,把第四个字段的值乘1.1 后的值输出。
2. 自定义数据分隔符
使用 -F
指定分隔符,筛选内容(使用统一数据):
gawk -F, '{print $2, $4}' product.txt
输出内容为:
P001 109.89
P002 175.45
P003 54.89
P001 109.89
3. 使用条件筛选数据
使用模式,添加条件数据,过滤数据:
gawk -F, '$4 >= 100 {print $1, $2}' product.txt
如上示例只输出第四个字段的值大于等于 100 的行的第一个字段和第二个字段。
输出内容为:
2025-09-01 P002
4. 统计计算
可以使用 END{}
在执行一个动作后,执行收尾处理:
gawk -F, '{sum += $4} END {print "总计:" sum}' product.txt
如上的示例:第一个动作会把第四个字段的值求和,赋值为 sum,使用 END 输出 sum
数据。
如上示例输出的内容为:
总计:409.2
5. 正则匹配(~
运算符)
针对特定字段后面使用 ~
运算符,后面指定正则表达式,使用正则表达式筛选数据:
gawk -F, '$1~/[02]$/ {print $2}' product.txt
如上示例中的正则表达式匹配第一个字段结尾为 02
的行的第二个字段,输出内容为:
P001
6. 使用外部变量
使用 -v
定义一个外部变量,在动作代码块中使用:
gawk -v today="$(date +%F)" 'BEGIN {print "日期:", today}'
如上示例:定义了一个外部变量 today,在动作代码块中输出变量,输出内容为:
日期: 2025-09-04
命令选项详解
如下给出 gawk 命令选项的详细解释说明:
选项 | 说明 | 技术细节 |
---|---|---|
-f file |
从文件读取脚本 | 支持多个 -f 选项叠加使用 |
-F fs |
指定字段的分隔符 | 支持正则表达式 |
-v var=val |
定义外部变量 | 可在 BEGIN 前初始化 |
-d[file] |
输出解析树 | 用于调试语法 |
-D[file] |
启用交互调试模式 | 支持断点/单步 |
-e program |
添加额外的代码 | 会在 -f 脚本前执行 |
-E file |
设置主脚本文件 | 安全执行不受信任的脚本 |
-i includefile |
加载库文件 | 支持 @include 指令 |
-l libname |
加载扩展库 | 需先安装 gawk 扩展 |
-M |
启用任意精度的算术 | 处理大整数/浮点 |
-n |
禁用所有输出 | 仅通过退出码返回结果 |
-o[file] |
格式化输出脚本内容 | 格式化复杂的脚本 |
-p[file] |
用于性能分析 | 输出函数调用统计信息 |
-P |
POSIX 标准兼容模式 | 禁用 GNU 扩展 |
-r |
使用正则表达式的区间 | 如 [a-z] 代替 [[:lower:]] |
-s |
沙箱运行模式 | 禁用 system() 等危险函数 |
-S |
源代码级调试模式 | 需配合 -D 使用 |
-V |
显示版本信息 | 包含功能支持列表 |
--dump-variables |
输出全局变量 | 格式为 awk 脚本 |
--profile |
用于能分析 | 同 -p |
--traditional |
启用传统模式 | 兼容旧版 awk |
--help |
显示帮助 | 包含所有选项 |
结语
本文全面的介绍了 gawk
的语法结构及其功能,并给出了 gawk
命令的具体使用示例,相信你能够对 gawk
命令有个基本的了解,并帮助你正确的使用 gawk
处理文本数据。 gawk
命令可以在 Linux 各发行版和 FreeBSD 系统中使用,基本功能是相同的。