首页>教程>Linux 命令手册> Linux awk 命令 >Linux gawk 命令 - GNU 版 awk 文本处理和分析工具

Linux gawk 命令 - GNU 版 awk 文本处理和分析工具

gawk ( GNU AWK ) 是 AWK 文本处理工具的 GNU 实现版本,它在 awk 工具的基本功能(对结构化文本进行分析、内容提取和转换)的基础上增强了其文本处理和数据提取能力。它能够基于正则表达式处理文本流,并支持复杂字段操作和计算等。

本文将为你介绍 gawk 命令的使用方法,使你对 gawk 命令具有基本的了解,方便你使用该工具处理文本数据。

相关工具对比

特性awkgawknawkmawk
实现基础标准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]用于性能分析输出函数调用统计信息
-PPOSIX 标准兼容模式禁用 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 系统中使用,基本功能是相同的。