`

awk NR与FNR

 
阅读更多

NR,表示awk开始执行程序后所读取的数据行数.

FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计.

 

下面看两个例子: 

 

1,对于单个文件NR 和FNR 的 输出结果一样的 :

# awk '{print NR,$0}' file1 

1 a b c d

2 a b d c

3 a c b d

 

#awk '{print FNR,$0}' file1 

1 a b c d

2 a b d c

3 a c b d

 

 

2,但是对于多个文件 :

# awk '{print NR,$0}' file1 file2

1 a b c d

2 a b d c

3 a c b d

4 aa bb cc dd

5 aa bb dd cc

6 aa cc bb dd

 

# awk '{print FNR,$0}' file1 file2

1 a b c d

2 a b d c

3 a c b d

1 aa bb cc dd

2 aa bb dd cc

3 aa cc bb dd

 

 

再看一个例子关于NR和FNR的典型应用:

现在有两个文件格式如下:

#cat account

张三|000001

李四|000002

#cat cdr

000001|10

000001|20

000002|30

000002|15

 

 

想要得到的结果是将用户名,帐号和金额在同一行打印出来,如下:

张三|000001|10

张三|000001|20

李四|000002|30

李四|000002|15

 

 

执行如下代码

#awk -F \| 'NR==FNR{a[$2]=$0;next}{print a[$1]"|"$2}' account cdr

 

注释:

由NR=FNR为真时,判断当前读入的是第一个文件account,然后使用{a[$2]=$0;next}循环将account文件的每行记录都存入数组a,并使用$2第2个字段作为下标引用.

 

由NR=FNR为假时,判断当前读入了第二个文件cdr,然后跳过{a[$2]=$0;next},对第二个文件cdr的每一行都无条件执行{print a[$1]"|"$2},此时变量$1为第二个文件的第一个字段,与读入第一个文件时,采用第一个文件第二个字段$2为数组下标相同.因此可以在此使用a[$1]引用数组。

分享到:
评论

相关推荐

    awk中NR和FNR的区别小结和实例演示

    一,NR和FNR的不同 NR:表示当前记录数 FNR:也表示当前记录数,但是FNR的作用域只在一个文件内.如果重新打开文件,FNR会从1开始. 二,实例说明 1,测试文件aaa,cccc 代码如下: [root@Blackghost test2]# cat aaa //...

    AWK中FNR和NR,OFS和FS,RS和ORS.txt

    AWK中FNR和NR,OFS和FS,RS和ORS.txt

    awk学习awk学习awk学习awk学习

    awk学习awk学习awk学习awk学习awk学习awk学习awk学习

    Awk入门教程 《Awk A Tutorial and Introduction - by Bruce Barnett》

    NR - The Number of Records Variable RS - The Record Separator Variable ORS - The Output Record Separator Variable FILENAME - The Current Filename Variable Associative Arrays Multi-dimensional ...

    awk入门到精通.pdf

    (awk 指令并不多, 且其中之大部分与 C语言中之用法一致, 本手册中对该类指令之语法及特性 不再加以繁冗的说明, 读者若欲深究,可自行翻阅相关的 C 语言书籍) 2. awk概述 为什么使用awk awk 是一种程序语言. 它具有...

    Sed与awk_中英文高清版

    Sed与awk_中英文高清版

    AWK用法AWK用法AWK用法

    awk ‘/101/’ file 显示文件file中包含101的匹配行。 awk ‘/101/,/105/’ file awk ‘$1 == 5′ file awk ‘$1 == “CT”‘ file 注意必须带双引号 awk ‘$1 * $2 >100 ‘ file awk ‘$2 >5 && $2<=15' file

    Sed与awk第三版(高清版).pdf

    sed与awk 编写脚本利器。

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

    很多朋友没搞告白AWK内建变量FS,NF,NR,RT,RS,ORS,OFS的方法和原理,小编给大家总结了详细的内容,一起来学习下思路。

    学习和理解AWK的最佳书籍Effective AWK Programming

    学习和理解AWK的最佳书籍  一致这本书是学习awk的最好书籍,网上下不到的,国内也买不到。国家图书馆和北京大学图书馆都有。强烈建议所有想学awk的同志们阅读(会有很多awk语言之外的启迪) 偶然机会得到,不敢独享...

    AWK AWK 详细使用文档

    AWK 详细使用文档 AWK 详细使用文档 AWK 详细使用文档

    Sed与Awk (中文版)

    sed和awk是用户、程序员和管理员应用的工具。之所以称为sed是因为它是一个流编辑器(stream editor),用于对许多文件执行一系列的编辑操作。awk是根据它的开发者Aho、Weinberger和Kernighan命名的。awk是一种编程...

    awk使用手册

    与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是具有独立意义的英文单词,也不是几个相关单词的缩写。事实上,awk是三个人名的缩写,他们是:Aho、(Peter)Weinberg和(Brain)Kernighan...

    awk参考资料下载awk

    awk参考资料, awk参考资料详情.

    Sed与awk第二版(高清版).pdf

    Sed与awk第二版(高清版).pdf

    awk用法小结--有关awk的材料

    awk用法小结 - - - by ruson 2006.4 NTU 1. awk非常适合于结构化的文本文件(行、列数据)复杂处理。相对于sed而言,它可进行复杂的编程处理,并且可以产生复杂的报表输出。 2. awk通常有三个版本,旧awk、nawk...

    awk详细用法小结awk awk

    因为遇到了awk问题,所以找到这个小结,共享一下

    Sed与awk 中文第二版

    sed和awk是用户、程序员和管理员应用的工具。之所以称为sed是因为它是一个流编辑器(stream editor),用于对许多文件执行一系列的编辑操作。awk是根据它的开发者aho、weinberger和kernighan命名的。awk是一种编程语言...

    linux环境下awk开发

    与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是具有独立意义的英文单词,也不是几个相关单词的缩写。事实上,awk是三个人名的缩写,他们是:Aho、(Peter)Weinberg和(Brain)Kernighan...

Global site tag (gtag.js) - Google Analytics