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这两个变量的用法对于高效地进行数据处理尤为重要。本文将详细介绍NR和FNR的区别,并通过实际例子来帮助理解它们各自的功能...
在深入探讨AWK中FNR和NR,OFS和FS,RS和ORS这些核心概念之前,我们先简要回顾一下AWK的基本功能。AWK是一种强大的文本处理工具,主要用于模式扫描与处理语言,广泛应用于数据处理、报告生成、格式转换等场景。其核心...
执行`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详解 #### 一、概述 AWK是一种强大的文本处理工具,主要用于格式化文本数据,广泛应用于Linux/Unix环境中。它拥有丰富的内置变量和函数,使得用户能够方便地...
- `FNR`:当前文件中的行号,独立于总行号NR。 - `FS`:字段分隔符,默认为空白字符。 - `IGNORECASE`:忽略大小写差异,用于模式匹配。 - `NF`:当前行中的字段数量。 - `NR`:总行号,从第一行开始计数。 - `OFMT`...
`awk`提供了许多内置变量,如`NF`表示当前行的字段数,`NR`表示已读取的记录数(行数),`FNR`则是在当前文件中的记录数。 **4. 模式匹配** `awk`的模式可以是正则表达式,例如`/pattern/`,也可以是逻辑表达式,如...
awk -F'[/,]' 'NR==FNR{a[$0]}NR>FNR{if ($2 in a) print $0}' b a >c ``` 这种方法的逻辑与方法一类似,但使用`NR`(总行数)和`FNR`(当前文件的行数)来区分处理不同的文件。当`NR==FNR`时,将`b`文件的内容...
利用NR和FNR变量,我们可以判断awk正在处理的是哪个文件中的行。通过设置RS参数,我们可以改变记录的分隔方式,使其与普通文本文件的处理有所不同。 结合上述介绍,awk命令是Linux环境下进行文本处理的重要工具,...
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 ...
$0代表当前处理的整行文本,NR代表已处理的记录总数,FNR代表当前文件中的记录数,NF代表当前记录中的字段数量。FS是输入字段分隔符,OFS是输出字段分隔符,默认值为空格。awk还提供print函数来进行字段的打印输出。...
awk提供了一系列内置变量,如`NR`(当前记录数)、`NF`(当前记录的字段数)和`FNR`(在当前文件中的记录数)。这些变量可以帮助我们编写更复杂的脚本。 **7. 函数** awk还提供了一些内建函数,如`length()`(返回...
在理解Awk时,重点在于掌握字段分隔符(FS)和记录分隔符(RS)的设置,以及内置变量如NF(字段数量)、NR(记录数量)和FNR(当前文件的记录数量)。此外,理解条件语句(if...else)和循环结构(for、while)也是...
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`是一种强大的文本处理工具,在Linux和Unix环境中非常常见。它主要用于提取、分析和处理文本文件中的数据。`awk`支持复杂的条件判断与循环操作,可以方便地进行数据分析、统计计算等...
awk '{print NR,NF,$1,$NF}' file 显示文件 file 的当前记录号、域数和每一行的第一个和最后一个域。 示例 3:通过管道符获得输入 df | awk '$4>1000000' 通过管道符获得输入,显示第 4 个域满足条件的行。 示例 ...
2. 行号:`NR`变量表示已读取的行数,可以用来匹配特定行,如`NR==5`匹配第五行。 3. 文件名:`FNR`变量是相对于当前文件的行数,用于多文件处理。 三、内置变量与字段分隔 1. 默认情况下,AWK将空格或制表符视为...
4. **内置变量**:Awk有许多内置变量,如`NF`表示当前行的字段数,`NR`是已读取的记录数,`FNR`是当前文件的记录数。 5. **条件语句和函数**:Awk支持条件判断(`if...else`)和循环(`for`、`while`),还有许多...
* 使用 awk 处理文本文件:`awk -F "#" '{print NF, NR, $0, ENVIRON["USER"], FILENAME}' awk1` * 使用 awk 替换文本:`awk -F "#" '{gsub("#", "||"); print $0}' awk1` * 使用 awk 分割字符串:`awk 'BEGIN {...