讀取兩個檔案時列印 awk 變數

我希望這個例子能幫助每個人理解當 awk 處理兩個檔案時,像 NR,FNR 等 awk 內部變數是如何變化的。

awk '{print "NR:",NR,"FNR:",FNR,"fname:",FILENAME,"Field1:",$1}' file1 file2
NR: 1 FNR: 1 fname: file1 Field1: f1d1
NR: 2 FNR: 2 fname: file1 Field1: f1d5
NR: 3 FNR: 3 fname: file1 Field1: f1d9
NR: 4 FNR: 1 fname: file2 Field1: f2d1
NR: 5 FNR: 2 fname: file2 Field1: f2d5
NR: 6 FNR: 3 fname: file2 Field1: f2d9

file1 和 file2 的位置如下:

$ cat file1
f1d1 f1d2 f1d3 f1d4

$ cat file2
f2d1 f2d2 f2d3 f2d4

注意 NR 值如何在所有檔案中保持增加,而 FNR 在每個檔案上重置。這就是為什麼表示式 NR==FNR 總是引用送到 awk 的第一個檔案,因為只有在第一個檔案中才能使 NR 等於 FNR