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
上加入文件 file1
和 file2
的记录:
$ 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
记录来自 file2
的 ZZZZ
缺失,因为 FNR
对于 file1
和 file2
具有不同的最大值,并且没有不同的 FNR
s 的连接。