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就可以很方便的获取最后一个字段了。

awk内建变量示例详解之NR、FNR、NF相关推荐

  1. linux NR==变量,LINUX中详解AWK内建变量FS,NF,NR,RT,RS,ORS,OFS

    看了网上好多关于AWK内建变量的文章,这里加上个人的理解和记忆,可以让大家掌握这些变量的基本用法. FS 指定字段un列分隔符(Font Space) [~/AWK_learning]$ echo & ...

  2. AWK 内建变量FS,NF,NR,FNR,RT,RS,ORS,OFS

      看了网上好多关于AWK内建变量的文章,这里加上个人的理解和记忆,可以让大家掌握这些变量的基本用法. FS 指定字段列分隔符(Font Space) [~/AWK_learning]$ echo & ...

  3. awk内置字符串函数详解

    awk提供了许多强大的字符串函数,见下表: awk内置字符串函数 gsub(r,s) 在整个$0中用s替代r gsub(r,s,t) 在整个t中用s替代r index(s,t) 返回s中字符串t的第一 ...

  4. mysql内置变量_详解MySQL注入利用的变量

    MySQL注入数据库时,我们可以利用内置的变量来得到更多的mysql信息,下面就让我们一起来了解MySQL注入利用的变量. 当我们注射mysql库的输入点的时候,可以通过version()/user( ...

  5. linux awk命令NR详解,awk命令之NR和FNR变量用法详解

    0.说明 刚好用到awk的NR和FNR这两个内建变量.经过一些测试大概熟悉其用法,这里记录下(本文只是用NR和FNR变量来判断当前读入的是第一个还是第二个文件,好对每个文件分别运行指定的脚本.需要注意 ...

  6. Nginx内置变量以及日志格式变量参数详解

    Nginx内置变量以及日志格式变量参数详解 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有 ...

  7. 西门子触摸屏HMI变量的指针化索引应用示例详解

    西门子触摸屏HMI变量的指针化索引应用示例详解 在实际HMI组态项目时,若有多台相同的设备的参数需要查看或显示时,可以使用变量的指针化索引功能来实现,优点是减少画面上IO域的数量,显示画面更简洁,具体 ...

  8. python实例化是什么意思_Python中实例化class的执行顺序示例详解

    前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 一般来说一个类里面有类变量和方法,比如我们定 ...

  9. ThinkPHP模版引擎之变量输出详解

    ThinkPHP模版引擎之变量输出详解 使用ThinkPHP开发有一定时间了,今日对ThinkPHP的模板引擎变量解析深入了解了一下,做出一些总结,分享给大家供大家参考.具体分析如下: 我们已经知道了 ...

最新文章

  1. 使用 C++ 的 StringBuilder 提升 4350% 的性能
  2. exp4me 用java做的实用的csv导出程序 - 名传无线.freeness.yang
  3. jzoj4244-yi【贪心】
  4. mysql如何保证高可用_mysql怎么保证高可用
  5. 图解linux启动过程
  6. java锁包读写锁_java8读写锁如何使用
  7. 【Elasticsearch】揭秘 Elasticsearch 分片分配
  8. 审计 6 SSRF和任意文件读取
  9. 盘点App测试会用到哪些工具
  10. 计算机搜索栏历史记录,如何打开搜索历史记录
  11. 没有学过C语言可以学Java吗?
  12. Scala之特质特质Trait
  13. 读取文件时内容乱码解决方法
  14. 对啊英语音标---一、什么是字母的名称音和发音
  15. python编程价格_Python基础练习实例46(查询价格)
  16. MongoDB 数据文件损坏修复救命repair与致命危险
  17. Python中squeeze函数用法
  18. canvas实现高斯模糊
  19. python3, 计算两个矩形框是否重叠,并计算重叠度
  20. jpg图片转ico图片格式

热门文章

  1. 皮一皮:我也想做这样的房东,善解人意、为他人着想...
  2. 每日一皮:当你修bug时,是否碰到过这种场景...
  3. 当当大促的额外优惠来啦!160 买 400的书!搓搓搓~
  4. java 连连看_java—连连看-实现封装
  5. CVPR‘22 最新106篇论文分方向整理|包含目标检测、动作识别、图像处理等32个方向
  6. SCRFD is not in the models registry
  7. yolov5 ncnn
  8. python 矩形补正方形
  9. python 均值漂移
  10. ImportError: dynamic module does not define module export function