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 的連線。