awk中的NR和FNR
时间: 2023-12-22 11:29:22 浏览: 115
在awk中,NR和FNR都是内置变量,用于表示当前记录数。它们的区别在于作用域不同。
1. NR表示当前记录数,它从awk开始执行时开始计数,每读取一个记录就加1。它的作用域跨越所有的输入文件,即NR会累计计数所有输入文件中的记录数。
2. FNR也表示当前记录数,但是它的作用域只在当前文件内。当awk打开一个新文件时,FNR会从1开始重新计数。因此,FNR只计数当前文件中的记录数。
下面是一个示例,演示了awk中NR和FNR的用法:
假设有两个文件,文件1.txt和文件2.txt,内容如下:
文件1.txt:
```
apple
banana
```
文件2.txt:
```
orange
grape
```
使用awk命令统计每个文件中的记录数和总记录数:
```shell
awk 'BEGIN{print "文件名\tNR\tFNR"} {print FILENAME "\t" NR "\t" FNR}' 文件1.txt 文件2.txt
```
输出结果:
```
文件名 NR FNR
文件1.txt 1 1
文件1.txt 2 2
文件2.txt 3 1
文件2.txt 4 2
```
可以看到,NR表示总记录数,FNR表示当前文件内的记录数。在文件1.txt中,NR和FNR的值相同,而在文件2.txt中,FNR重新从1开始计数。
相关问题
linux shell nr,awk中NR和FNR的区别小结和实例演示
NR和FNR都是Linux Shell中的变量,它们表示当前处理的行号。它们的区别在于:
- NR表示处理到当前行为止的记录数,即全局行号;
- FNR表示处理到当前行为止的文件记录数,即当前文件的行号。
举个例子,如果我们有两个文件file1和file2,分别包含3行和2行:
file1:
```
apple
banana
orange
```
file2:
```
dog
cat
```
如果我们执行以下命令:
```
awk '{print NR,FNR,$0}' file1 file2
```
那么输出将会是:
```
1 1 apple
2 2 banana
3 3 orange
4 1 dog
5 2 cat
```
可以看到,NR和FNR在file1中的值是相等的,都是1、2、3,因为awk处理file1时,它认为整个输入流只有3行。在file2中,NR的值从4开始增加,而FNR的值还是从1开始,因为awk认为当前处理的是另一个文件。
awk中NR与FNR
NR和FNR是awk中的两个内置变量,用于表示当前读取的记录数。它们的区别在于作用域不同。
NR表示整个输入文件中的当前记录数,其变量值从1开始递增,包括所有输入文件。而FNR也表示当前记录数,但其作用域仅限于当前输入文件,当重新打开新的文件时,FNR会重新从1开始计数。
举个例子来说明:
假设有两个文件,文件1的内容为aaa、bbb,文件2的内容为ccc、ddd。使用以下命令进行操作:
awk '{print NR, FNR, $0}' file1 file2
输出结果为:
1 1 aaa
2 2 bbb
3 1 ccc
2 ddd
可以看到,在整个操作中,NR和FNR的值不同。NR从1开始递增,而FNR在每个文件中从1重新开始计数。
阅读全文