awk中NR与FNR
时间: 2023-11-19 08:49:55 浏览: 142
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重新开始计数。
相关问题
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、nf、$nf、fs、ofs的说明
- `NR` 表示已经读入的记录数(即当前处理的是第几行),它是一个全局变量,从1开始计数,每读入一条记录就会自动加1。
- `FNR` 表示当前文件中已经读入的记录数,它是一个局部变量,只对当前文件有效,从1开始计数,每次读入一条记录就会自动加1。
- `NF` 表示当前记录中的字段数(即当前行有多少个字段),它也是一个局部变量,只对当前行有效。
- `$NF` 表示当前记录的最后一个字段。
- `FS` 表示字段分隔符,默认是空格或制表符。
- `OFS` 表示输出字段分隔符,默认也是空格。
阅读全文