linux NF NR实例,awk内建变量示例详解之NR、FNR、NF

阅读: 评论:0

linux NF NR实例,awk内建变量示例详解之NR、FNR、NF

linux NF NR实例,awk内建变量示例详解之NR、FNR、NF

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

本文发布于:2024-02-02 17:21:07,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170686566845294.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:示例   内建   变量   详解   实例
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23