Linux nawk 命令 - 新版 awk 文本处理和分析工具
• 最后修改:2025-09-05 • 阅读量:84
nawk ( 英文名称:New AWK ) 是 Linux / FreeBSD 系统中的 AWK 文本处理语言工具的现代实现,它在 awk 工具的基本功能(对结构化文本进行分析、内容提取和转换)的基础上优化了其功能,它能够更加高效的处理结构化数据列,执行算术运算和字符串操作。
本文将为你介绍 nawk
命令的使用方法,使你对 nawk
命令具有基本的了解,方便你使用该工具处理文本数据。
相关工具对比
特性 | awk | gawk | nawk | mawk |
---|---|---|---|---|
实现 | 基础标准 | GNU 增强版本 | 新版的 AWK | 简易的实现 |
性能 | 标准 | 高度优化 | 较好 | 最快 |
默认系统 | 到预装版本的链接 | RHEL 系预装 | FreeBSD 预装 | Debian 系预装 |
nawk 命令语法
如下给出 nawk
命令的基本语法结构:
nawk [选项] '模式 { 动作 }' 文件...
nawk [选项] -f 脚本文件 文件...
语法结构中组成部分的解释:
- 模式:行匹配条件(可以使用正则或表达式等)
- 动作:模式匹配后执行的命令(用
{}
包裹,还可以另外包含”BEGIN{}
:初始处理代码块,END{}
:结束处理代码块“) - 文件:用来读取内容的文件(文件中字段默认的分隔符为空白字符[空格、Tab])
可以使用的其他符号:
FS
:字段分隔符(默认空格)OFS
:输出字段分隔符NR
:当前行号NF
:当前行字段数
系统安装指南
nawk 是现代版本的 awk,在没有预装 nawk
的系统中也包含 nawk 软件包。
Debian / Ubuntu 系统
在 Debian / Ubuntu 系统上使用如下命令安装 nawk 命令:
sudo apt update && sudo apt install nawk -y
RHEL / AlmaLinux 系统
在 RHEL / AlmaLinux / Rocky Linux 系统上使用如下命令安装 nawk 命令:
sudo dnf update && sudo dnf install nawk -y
FreeBSD 系统
# 默认已安装为 awk
awk -W version # 验证版本
nawk 命令使用示例
如下的示例中没有使用特定数据的话,就使用如下的 salary.txt
文本中的工资数据:
张三 技术部 前端工程师 12000
李四 市场部 销售经理 15000
王五 人事部 招聘专员 8000
赵六 技术部 后端工程师 13500
字段对应的统一名称为:姓名、部门、职位、基本工资
1. 基本字段提取
使用 $
符号后面跟数字 n
,引用第 n
个字段;当数字为 0
时,引用的整行的内容:
nawk '{print $1,$4}' salary.txt
如上的名称输出第一个字段姓名和第四字段工资,输出内容为:
张三 12000
李四 15000
王五 8000
赵六 13500
2. 使用条件过滤数据
使用模式添加条件判断,只输出符合条件的数据:
nawk '$4 > 12000 {print $1}' salary.txt
如上示例会输出工资大于 12000 的人员的姓名:
李四
赵六
3. 自定义字段分隔符
该示例使用如下的数据:
张三,技术部,前端工程师,12000
李四,市场部,销售经理,15000
王五,人事部,招聘专员,8000
赵六,技术部,后端工程师,13500
使用 -F
选项指定字段的分隔符:
nawk -F, '{print $1,$2}' salary.txt
输出内容为:
张三 技术部
李四 市场部
王五 人事部
赵六 技术部
4. 使用模式定义范围
该示例使用如下的数据:
张三 技术部 前端工程师 12000
START
李四 市场部 销售经理 15000
王五 人事部 招聘专员 8000
END
赵六 技术部 后端工程师 13500
使用一个正则表达式匹配开始位置,同时再使用另一个正则表达式匹配末尾位置:
nawk '/START/, /END/ {print NR, $0}' salary.txt
如上示例:NR
为当前的行号,输出内容为:
2 START
3 李四 市场部 销售经理 15000
4 王五 人事部 招聘专员 8000
5 END
5. 使用内置函数
nawk
命令内置了一些函数,可以在动作中使用:
nawk '{print length($2)}' salary.txt
如上示例使用 length()
函数统计字节的长度,字节的长度而不是字符的长度,字节的长度与使用的编码有关,输出内容为:
9
9
9
9
示例文件使用的是 UTF-8,每个汉字占三个字节。
6. 大文件性能
在处理大文件时,使用管道减少内容的使用:
nawk 'NF > 5 {print $1, $6}' file1.txt > file2.txt
命令选项详解
如下给出 nawk 命令选项的详细解释说明:
选项 | 说明 | 技术细节 |
---|---|---|
-f file |
从文件读取脚本内容 | 支持多文件包含 |
-F fs |
指定字段的分隔符 | 支持正则表达式 |
-v var=val |
定义外部变量,在动作内使用 | 可以在 BEGIN 前初始化 |
-n |
预设变量 | 等效 -v |
-W compat |
兼容模式 | 模拟传统 awk |
-W posix |
严格使用 POSIX 模式 | 禁用扩展 |
-W version |
显示版本信息 | 包含功能支持 |
-W exec file |
执行脚本文件 | 安全模式 |
结语
本文全面的介绍了 nawk
的语法结构及其功能,并给出了 nawk
命令的具体使用示例,相信你能够对 nawk
命令有个基本的了解,并帮助你正确的使用 nawk
处理文本数据。 nawk
命令可以在 Linux 各发行版和 FreeBSD 系统中使用,基本功能是相同的。