Linux nawk 命令 - 新版 awk 文本处理和分析工具
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 系统中使用,基本功能是相同的。