转自:http://www.letuknowit.com/topics/20120329/sample-about-awk-build-in-variable-nr-fnr-nf.html
NR表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,因此默认的就是读取的数据行数,NR可以理解为Number of Record的缩写。
在awk处理多个输入文件的时候,在处理完第一个文件后,NR并不会从1开始,而是继续累加,因此就出现了FNR,每当处理一个新文件的时候,FNR就从1开始计数,FNR可以理解为File Number of Record。
NF表示目前的记录被分割的字段的数目,NF可以理解为Number of Field。
下面以示例程序来进行说明,首先准备两个输入文件class1和class2,记录了两个班级的成绩信息,内容分别如下所示:
CodingAnts@ubuntu:~/awk$ cat class1
zhaoyun 85 87
guanyu 87 88
liubei 90 86
CodingAnts@ubuntu:~/awk$ cat class2
caocao 92 87 90
guojia 99 96 92
现在要查看两个班级的所有成绩信息,并在每条信息前加上行号,则可以使用下面的awk指令;
CodingAnts@ubuntu:~/awk$ awk '{print NR,$0}' class1 class2
1 zhaoyun 85 87
2 guanyu 87 88
3 liubei 90 86
4 caocao 92 87 90
5 guojia 99 96 92
这里的行号就是通过NR来实现的,awk每读取一条记录,NR的值便加一。如果要求每个班级的行号从头开始变化,则需要使用FNR来实现,如下:
CodingAnts@ubuntu:~/awk$ awk '{print FNR,$0}' class1 class2
1 zhaoyun 85 87
2 guanyu 87 88
3 liubei 90 86
1 caocao 92 87 90
2 guojia 99 96 92
下面的示例结合awk内建变量FILENAME,显示出来的两个班级的成绩信息可以进行更好的区分;
CodingAnts@ubuntu:~/awk$ awk '{print FILENAME,"NR="NR,"FNR="FNR,"$"NF"="$NF}' class1 class2
class1 NR=1 FNR=1 $3=87
class1 NR=2 FNR=2 $3=88
class1 NR=3 FNR=3 $3=86
class2 NR=4 FNR=1 $4=90
class2 NR=5 FNR=2 $4=92
除了NR和FNR外,上面的示例中还演示了NF的使用,class1中每行有3个字段,而class2中有4个字段,通过$NF就可以很方便的获取最后一个字段了。
分享到:
相关推荐
### Linux中AWK内建变量FS、NF、NR、RT、RS、ORS、OFS详解 #### 一、概述 AWK是一种强大的文本处理工具,主要用于格式化文本数据,广泛应用于Linux/Unix环境中。它拥有丰富的内置变量和函数,使得用户能够方便地...
- `NF`变量表示当前行的字段数量。 4. **内置变量** - `NR`记录已处理的行数。 - `FNR`记录当前文件已处理的行数,多文件处理时与NR不同。 - `ORS`和`OFS`分别设置输出记录和输出字段的分隔符。 5. **动作和...
`awk`提供了许多内置变量,如`NF`表示当前行的字段数,`NR`表示已读取的记录数(行数),`FNR`则是在当前文件中的记录数。 **4. 模式匹配** `awk`的模式可以是正则表达式,例如`/pattern/`,也可以是逻辑表达式,如...
根据提供的文件信息,这里将对`awk`命令进行详细的解析与说明。`awk`是一种强大的文本处理工具,常用于Linux/Unix环境中。它能够通过指定的模式或规则来读取、处理并输出文本数据。 ### awk 命令概述 #### 命令...
### awk命令详解:快速进阶与简洁入门 #### 第一章:awk的调用方式 在Shell编程中,`awk`是一种极其强大的工具,主要用于文本数据的处理与分析。它能够方便地处理列数据,因此在数据分析、日志处理等方面应用广泛...
awk 命令用法详解 awk 是一个功能强大且灵活的文本处理工具,它可以对文本进行各种操作,如搜索、匹配、计算、格式化等。awk 的基本语法为 `awk 'pattern {action}' file`,其中 `pattern` 是模式,`action` 是对...
### Linux Awk 编程详解 #### 一、awk 命令格式与选项 **awk** 是一种强大的文本处理工具,在 Linux 和 Unix 环境下被广泛使用。它支持复杂的模式匹配和数据处理任务,非常适合用于数据分析、报告生成等场景。 ##...
### Linux Shell 编程之 Awk 用法详解 在Linux环境下,Awk是一种强大的文本处理工具,用于处理结构化的数据。Awk不仅能够执行基本的打印操作,还能进行复杂的模式匹配、数据筛选和数学运算,是Linux系统管理员和...
#### 四、示例详解 1. **简单匹配** - `awk '/101/' file`: 显示文件`file`中包含数字`101`的所有行。 - `awk '/101/,/105/' file`: 显示从包含`101`的行到包含`105`的行之间的所有行。 2. **字段选择与计算** ...
### Unix之AWK使用详解 #### 一、AWK简介 AWK是一种强大的文本处理工具,在Unix和类Unix操作系统中广泛使用。它不仅能够高效地处理数据,还具备一定的编程能力,可以用来编写复杂的脚本。 #### 二、基本语法与...
**awk详解** awk是一种强大的文本分析工具,常用于处理数据文件,特别是在Unix/Linux环境中。它是一种样式扫描与处理工具,可以方便地从大型文本数据中提取、格式化和操作信息。awk的名字来源于它的三位创始人——...
通过以上介绍和示例,我们可以看到awk的强大之处在于其灵活性和丰富的功能集,能够满足各种文本处理的需求。无论是简单的数据提取还是复杂的文本分析,awk都能提供有效的解决方案。对于Linux运维人员来说,掌握awk的...
### awk入门教程知识点详解 #### 一、概述 **awk** 是一种强大的文本处理工具,最初由 AT&T 贝尔实验室的 Alfred Aho、Peter Weinberger 和 Brian Kernighan 开发。它主要应用于 Unix 系统中,用于数据加工和信息...
例如,以下`awk`命令示例: ```bash awk -F: '{if ($1=="root") print $1, "Admin"; else print $1, "Common User"}' /etc/passwd ``` 会检查`/etc/passwd`文件中的每一行,如果用户名是`root`,则输出`root Admin`...
awk '{print NR, NF, $1, $NF} file' ``` 打印文件`file`的每行的行号、字段数、第一列和最后一列。 - **数值运算** ``` awk '/101/ {print $1, $2 + 10} file' ``` 对于文件`file`中包含“101”的行,打印...
- **使用变量**: `awk -F "|" '{ print $NF "------" NF }' file.txt` 打印最后一列以及该行的域数量。 - **算术运算**: `awk -F "|" '{ sum += $3 } END { print sum }' file.txt` 计算第三列所有数值的总和。 ###...