FNR - 正在处理的当前记录编号

FNR 包含正在处理的输入文件行的编号。在此示例中,你将看到 awk 在开始处理第二个文件时再次从 1 开始。

一个文件的示例

$ cat file1
AAAA
BBBB
CCCC
$ awk '{ print FNR }' file1
1
2
3

两个文件的示例

$ cat file1
AAAA
BBBB
CCCC
$ cat file2
WWWW
XXXX
YYYY
ZZZZ
$ awk '{ print FNR, FILENAME, $0 }' file1 file2
1 file1 AAAA
2 file1 BBBB
3 file1 CCCC
1 file2 WWWW
2 file2 XXXX
3 file2 YYYY
4 file2 ZZZZ

带有两个文件的扩展示例

FNR 可用于检测 awk 是否正在处理第一个文件,因为 NR==FNR 仅对第一个文件为真。例如,如果我们想要在他们的 FNR 上加入文件 file1file2 的记录:

$ awk 'NR==FNR { a[FNR]=$0; next } (FNR in a) { print FNR, a[FNR], $1 }' file1 file2
1 AAAA WWWW
2 BBBB XXXX
3 CCCC YYYY

记录来自 file2ZZZZ 缺失,因为 FNR 对于 file1file2 具有不同的最大值,并且没有不同的 FNRs 的连接。