awk内建变量示例详解之NR、FNR、NF
2016-09-20 19:34
381 查看
NR表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,因此默认的就是读取的数据行数,NR可以理解为Number of Record的缩写。
在awk处理多个输入文件的时候,在处理完第一个文件后,NR并不会从1开始,而是继续累加,因此就出现了FNR,每当处理一个新文件的时候,FNR就从1开始计数,FNR可以理解为File Number of Record。
NF表示目前的记录被分割的字段的数目,NF可以理解为Number of Field。
下面以示例程序来进行说明,首先准备两个输入文件class1和class2,记录了两个班级的成绩信息,内容分别如下所示:
在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 入门 —— 强大的文本分析工具
- 如何在 Linux / Unix 上使用 awk 打印文件名
- 文本处理工具AWK详解
- Perl中的特殊内置变量详细介绍
- awk简介与学习笔记收集第1/3页
- awk 九九乘法表 shell实现代码
- linux shell awk获得外部变量(变量传值)简介
- sed或awk处理文件最后一行的实现方法
- awk中查看包含某两列字符的用法
- awk区间取值的例子
- php魔术方法与魔术变量、内置方法与内置变量的深入分析
- 一天一个shell命令 linux文本内容操作系列-awk命令详解
- awk实现Left、join查询、去除重复值以及局部变量讲解例子
- awk中让人郁闷的system()函数
- awk中实现ord函数功能
- awk中RS、ORS、FS、OFS的区别和联系小结
- 分享awk变量$0的妙用
- linux awk时间计算脚本及awk命令详解
- awk正则表达式和内置函数的使用方法实例详解
- Shell正则表达式之grep、sed、awk实操笔记