`

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的区别小结和实例演示

    ### awk中NR和FNR的区别详解与实例演示 在学习awk这一强大的文本处理工具时,了解NR和FNR这两个变量的用法对于高效地进行数据处理尤为重要。本文将详细介绍NR和FNR的区别,并通过实际例子来帮助理解它们各自的功能...

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

    在深入探讨AWK中FNR和NR,OFS和FS,RS和ORS这些核心概念之前,我们先简要回顾一下AWK的基本功能。AWK是一种强大的文本处理工具,主要用于模式扫描与处理语言,广泛应用于数据处理、报告生成、格式转换等场景。其核心...

    yinyuemi--awk初学之常见问题1

    执行`awk '{print "NR = " NR " FNR = " FNR $0}' file1 file2`会得到: ``` NR = 1 FNR = 1 a NR = 2 FNR = 2 b NR = 3 FNR = 3 c NR = 4 FNR = 1 d NR = 5 FNR = 2 e NR = 6 FNR = 3 f ``` 3. Awk如何引入外部...

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

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

    awk详细用法小结awk awk

    - `FNR`:当前文件中的行号,独立于总行号NR。 - `FS`:字段分隔符,默认为空白字符。 - `IGNORECASE`:忽略大小写差异,用于模式匹配。 - `NF`:当前行中的字段数量。 - `NR`:总行号,从第一行开始计数。 - `OFMT`...

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

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

    用awk数组处理两个文件

    awk -F'[/,]' 'NR==FNR{a[$0]}NR>FNR{if ($2 in a) print $0}' b a >c ``` 这种方法的逻辑与方法一类似,但使用`NR`(总行数)和`FNR`(当前文件的行数)来区分处理不同的文件。当`NR==FNR`时,将`b`文件的内容...

    linux-shell脚本命令:awk命令简介

    利用NR和FNR变量,我们可以判断awk正在处理的是哪个文件中的行。通过设置RS参数,我们可以改变记录的分隔方式,使其与普通文本文件的处理有所不同。 结合上述介绍,awk命令是Linux环境下进行文本处理的重要工具,...

    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_oneliner

    - **特殊变量**: `awk` 提供了一系列特殊变量,如 `FNR`, `NR`, `NF`, `FS`, `OFS`, `RS`, `ORS` 等,这些变量可以用来控制 `awk` 的行为。例如,`FNR` 和 `NR` 分别表示当前行在当前文件和所有已读文件中的行数,`...

    awk文本处理工具

    $0代表当前处理的整行文本,NR代表已处理的记录总数,FNR代表当前文件中的记录数,NF代表当前记录中的字段数量。FS是输入字段分隔符,OFS是输出字段分隔符,默认值为空格。awk还提供print函数来进行字段的打印输出。...

    awk tutorial and introduction 英文版

    awk提供了一系列内置变量,如`NR`(当前记录数)、`NF`(当前记录的字段数)和`FNR`(在当前文件中的记录数)。这些变量可以帮助我们编写更复杂的脚本。 **7. 函数** awk还提供了一些内建函数,如`length()`(返回...

    Sed与awk第二版(高清版)

    在理解Awk时,重点在于掌握字段分隔符(FS)和记录分隔符(RS)的设置,以及内置变量如NF(字段数量)、NR(记录数量)和FNR(当前文件的记录数量)。此外,理解条件语句(if...else)和循环结构(for、while)也是...

    AWK应用和讲解步骤

    awk '{ if ($1 == "root") { print $1 } else if ($1 == "seker") { print $6 } else if ($1 == "zorro") { print $7 } else { print NR } }' /etc/passwd ``` #### 示例5:使用表达式 ```bash awk '{ print($3 > ...

    awk 工具用法说明

    #### 一、awk简介与基本语法 `awk`是一种强大的文本处理工具,在Linux和Unix环境中非常常见。它主要用于提取、分析和处理文本文件中的数据。`awk`支持复杂的条件判断与循环操作,可以方便地进行数据分析、统计计算等...

    awk用法__都是例子

    awk '{print NR,NF,$1,$NF}' file 显示文件 file 的当前记录号、域数和每一行的第一个和最后一个域。 示例 3:通过管道符获得输入 df | awk '$4>1000000' 通过管道符获得输入,显示第 4 个域满足条件的行。 示例 ...

    Linux/Unix AWK详细用法中文图解

    2. 行号:`NR`变量表示已读取的行数,可以用来匹配特定行,如`NR==5`匹配第五行。 3. 文件名:`FNR`变量是相对于当前文件的行数,用于多文件处理。 三、内置变量与字段分隔 1. 默认情况下,AWK将空格或制表符视为...

    shell awk实用实例教程

    4. **内置变量**:Awk有许多内置变量,如`NF`表示当前行的字段数,`NR`是已读取的记录数,`FNR`是当前文件的记录数。 5. **条件语句和函数**:Awk支持条件判断(`if...else`)和循环(`for`、`while`),还有许多...

    linux中shell脚本中awk的深入分析

    * 使用 awk 处理文本文件:`awk -F "#" '{print NF, NR, $0, ENVIRON["USER"], FILENAME}' awk1` * 使用 awk 替换文本:`awk -F "#" '{gsub("#", "||"); print $0}' awk1` * 使用 awk 分割字符串:`awk 'BEGIN {...

Global site tag (gtag.js) - Google Analytics