`
huiminchen
  • 浏览: 75793 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

【转】awk内建变量示例详解之NR、FNR、NF

 
阅读更多

转自: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

    ### Linux中AWK内建变量FS、NF、NR、RT、RS、ORS、OFS详解 #### 一、概述 AWK是一种强大的文本处理工具,主要用于格式化文本数据,广泛应用于Linux/Unix环境中。它拥有丰富的内置变量和函数,使得用户能够方便地...

    linu awk命令详解_linuawk命令详解_

    - `NF`变量表示当前行的字段数量。 4. **内置变量** - `NR`记录已处理的行数。 - `FNR`记录当前文件已处理的行数,多文件处理时与NR不同。 - `ORS`和`OFS`分别设置输出记录和输出字段的分隔符。 5. **动作和...

    awk实例详解——Unix下awk的使用

    `awk`提供了许多内置变量,如`NF`表示当前行的字段数,`NR`表示已读取的记录数(行数),`FNR`则是在当前文件中的记录数。 **4. 模式匹配** `awk`的模式可以是正则表达式,例如`/pattern/`,也可以是逻辑表达式,如...

    awk命令详解

    根据提供的文件信息,这里将对`awk`命令进行详细的解析与说明。`awk`是一种强大的文本处理工具,常用于Linux/Unix环境中。它能够通过指定的模式或规则来读取、处理并输出文本数据。 ### awk 命令概述 #### 命令...

    awk命令详解 快速进阶 简洁入门

    ### awk命令详解:快速进阶与简洁入门 #### 第一章:awk的调用方式 在Shell编程中,`awk`是一种极其强大的工具,主要用于文本数据的处理与分析。它能够方便地处理列数据,因此在数据分析、日志处理等方面应用广泛...

    awk用法__都是例子

    awk 命令用法详解 awk 是一个功能强大且灵活的文本处理工具,它可以对文本进行各种操作,如搜索、匹配、计算、格式化等。awk 的基本语法为 `awk 'pattern {action}' file`,其中 `pattern` 是模式,`action` 是对...

    linux awk编程

    ### Linux Awk 编程详解 #### 一、awk 命令格式与选项 **awk** 是一种强大的文本处理工具,在 Linux 和 Unix 环境下被广泛使用。它支持复杂的模式匹配和数据处理任务,非常适合用于数据分析、报告生成等场景。 ##...

    linux shell 编程之 awk用法

    ### Linux Shell 编程之 Awk 用法详解 在Linux环境下,Awk是一种强大的文本处理工具,用于处理结构化的数据。Awk不仅能够执行基本的打印操作,还能进行复杂的模式匹配、数据筛选和数学运算,是Linux系统管理员和...

    awk 工具用法说明

    #### 四、示例详解 1. **简单匹配** - `awk '/101/' file`: 显示文件`file`中包含数字`101`的所有行。 - `awk '/101/,/105/' file`: 显示从包含`101`的行到包含`105`的行之间的所有行。 2. **字段选择与计算** ...

    unix之AWK使用小解

    ### Unix之AWK使用详解 #### 一、AWK简介 AWK是一种强大的文本处理工具,在Unix和类Unix操作系统中广泛使用。它不仅能够高效地处理数据,还具备一定的编程能力,可以用来编写复杂的脚本。 #### 二、基本语法与...

    shell script之awk讲解

    **awk详解** awk是一种强大的文本分析工具,常用于处理数据文件,特别是在Unix/Linux环境中。它是一种样式扫描与处理工具,可以方便地从大型文本数据中提取、格式化和操作信息。awk的名字来源于它的三位创始人——...

    格式化文本工具(awk)

    通过以上介绍和示例,我们可以看到awk的强大之处在于其灵活性和丰富的功能集,能够满足各种文本处理的需求。无论是简单的数据提取还是复杂的文本分析,awk都能提供有效的解决方案。对于Linux运维人员来说,掌握awk的...

    awk入门教程

    ### awk入门教程知识点详解 #### 一、概述 **awk** 是一种强大的文本处理工具,最初由 AT&T 贝尔实验室的 Alfred Aho、Peter Weinberger 和 Brian Kernighan 开发。它主要应用于 Unix 系统中,用于数据加工和信息...

    awk(报告生成器)详解

    例如,以下`awk`命令示例: ```bash awk -F: '{if ($1=="root") print $1, "Admin"; else print $1, "Common User"}' /etc/passwd ``` 会检查`/etc/passwd`文件中的每一行,如果用户名是`root`,则输出`root Admin`...

    sed 使用手册linux unix 下常用的文本处理工具。用来处理格式化文本

    awk '{print NR, NF, $1, $NF} file' ``` 打印文件`file`的每行的行号、字段数、第一列和最后一列。 - **数值运算** ``` awk '/101/ {print $1, $2 + 10} file' ``` 对于文件`file`中包含“101”的行,打印...

    shell编程-2

    - **使用变量**: `awk -F "|" '{ print $NF "------" NF }' file.txt` 打印最后一列以及该行的域数量。 - **算术运算**: `awk -F "|" '{ sum += $3 } END { print sum }' file.txt` 计算第三列所有数值的总和。 ###...

Global site tag (gtag.js) - Google Analytics