AWK的NR和FNR詳解

2021-07-05 08:39:45 字數 1194 閱讀 6590

書上說:

nr,表示awk開始執行程式後所讀取的資料行數.

fnr,與nr功用類似,不同的是awk每開啟乙個新檔案,fnr便從0重新累計.

下面看兩個例子:

1,對於單個檔案nr 和fnr 的 輸出結果一樣的 :

# awk '' file1 

1 a b c d

2 a b d c

3 a c b d

#awk '' file1 

1 a b c d

2 a b d c

3 a c b d 

2,但是對於多個檔案 :

# awk '' file1 file2

1 a b c d

2 a b d c

3 a c b d

4 aa bb cc dd

5 aa bb dd cc

6 aa cc bb dd

# awk '' file1 file2

1 a b c d

2 a b d c

3 a c b d

1 aa bb cc dd

2 aa bb dd cc

3 aa cc bb dd

在看乙個例子關於nr和fnr的

典型應用:

現在有兩個檔案格式如下:

#cat account

張三|000001

李四|000002

#cat cdr

000001|10

000001|20

000002|30

000002|15

想要得到的結果是將使用者名稱,帳號和金額在同一行列印出來,如下:

張三|000001|10

張三|000001|20

李四|000002|30

李四|000002|15

執行如下**

#awk -f \| 'nr==fnr' account cdr

注釋:由nr=fnr為真時,判斷當前讀入的是第乙個檔案account,然後使用迴圈將account檔案的每行記錄都存入陣列a,並使用$2第2個字段作為下標引用.

由nr=fnr為假時,判斷當前讀入了第二個檔案cdr,然後跳過,對第二個檔案cdr的每一行都無條件執行,此時變數$1為第二個檔案的第乙個字段,與讀入第乙個檔案時,採用第乙個檔案第二個字段$2為陣列下標相同.因此可以在此使用a[$1]引用陣列。

awk的NR和FNR區別

nr,表示awk開始執行程式後所讀取的資料行數.fnr,與nr功用類似,不同的是awk每開啟乙個新檔案,fnr便從0重新累計.下面看兩個例子 1,對於單個檔案nr 和fnr 的 輸出結果一樣的 awk file1 1 a b c d 2 a b d c 3 a c b d awk file1 1 a...

awk中的NR和FNR的區別

一,nr和fnr的不同 nr 表示當前記錄數 fnr 也表示當前記錄數,但是fnr的作用域只在乙個檔案內.如果重新開啟檔案,fnr會從1開始.二,例項說明 1,測試檔案aaa,cccc root blackghost test2 cat aaa 測試檔案aaa 1111 23434 zhang ho...

awk中的NR和FNR的區別

nr,表示awk開始執行程式後所讀取的資料行數.fnr,與nr功用類似,不同的是awk每開啟乙個新檔案,fnr便從0重新累計.下面看兩個例子 1,對於單個檔案nr 和fnr 的 輸出結果一樣的 awk file1 1 a b c d 2 a b d c 3 a c b d awk file1 1 a...