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

Linux nawk 命令 - 新版 awk 文本处理和分析工具

nawk ( 英文名称:New AWK ) 是 Linux / FreeBSD 系统中的 AWK 文本处理语言工具的现代实现,它在 awk 工具的基本功能(对结构化文本进行分析、内容提取和转换)的基础上优化了其功能,它能够更加高效的处理结构化数据列,执行算术运算和字符串操作。

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

相关工具对比

特性awkgawknawkmawk
实现基础标准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 系统中使用,基本功能是相同的。