awk中nr、fnr、nf、$nf、fs、ofs的说明
时间: 2023-08-26 22:05:42 浏览: 63
- `NR` 表示已经读入的记录数(即当前处理的是第几行),它是一个全局变量,从1开始计数,每读入一条记录就会自动加1。
- `FNR` 表示当前文件中已经读入的记录数,它是一个局部变量,只对当前文件有效,从1开始计数,每次读入一条记录就会自动加1。
- `NF` 表示当前记录中的字段数(即当前行有多少个字段),它也是一个局部变量,只对当前行有效。
- `$NF` 表示当前记录的最后一个字段。
- `FS` 表示字段分隔符,默认是空格或制表符。
- `OFS` 表示输出字段分隔符,默认也是空格。
相关问题
awk中NF和NR以及$NF和!NF的用法详解
在awk中,NF和NR是两个内置变量,分别表示当前记录(行)中的字段数和当前处理的记录(行)数。而$NF表示当前记录(行)中的最后一个字段,!NF则表示当前记录(行)中是否有字段。
具体用法如下:
1. NF:
在awk的处理过程中,每个记录(行)被分割成若干个字段,这些字段可以通过$1, $2, $3, …, $NF来引用。而NF就是表示当前记录的字段数,可以在程序中使用。
例如,如果要打印每行的字段数,可以使用以下命令:
```
awk '{print NF}' file.txt
```
2. NR:
NR表示当前处理的记录(行)数,可以在程序中使用。例如,如果要打印文件的行号,可以使用以下命令:
```
awk '{print NR, $0}' file.txt
```
其中$0表示当前记录(行)的全部内容。
3. $NF:
$NF表示当前记录(行)中的最后一个字段。例如,下面的命令会打印每行的最后一个字段:
```
awk '{print $NF}' file.txt
```
4. !NF:
!NF表示当前记录(行)中是否有字段。如果当前记录中没有字段,则!NF为真,否则为假。例如,如果想打印没有字段的行,可以使用以下命令:
```
awk '!NF' file.txt
```
上述命令将打印文件中所有没有字段的行。
总之,NF和NR是awk中常用的内置变量,可以帮助我们进行字符串处理和统计。而$NF和!NF则可以用来引用当前记录(行)的最后一个字段和判断当前记录(行)是否有字段。
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重新开始计数。