Linux awk 系列文章之 awk NR 與 FNR 不同

Awk可以使用變量NR和FNR來處理多個文件。

NR:當前記錄的序號,多個文件序號遞增

FNR:當前文件中記錄的序號,每個文件從1開始

awk NR的示例

  • 處理單個文件
➜ awk '{print "ordinal number: " NR " - " $0}' test1.txt
Linux awk 系列文章之 awk NR 與 FNR 不同

  • 處理多個文件
➜ awk '{print "ordinal number: " NR " - " $0}' test1.txt test2.txt
Linux awk 系列文章之 awk NR 與 FNR 不同

awk FNR的示例

  • 處理單個文件
➜ awk '{print "ordinal number: " FNR " - " $0}' test1.txt
Linux awk 系列文章之 awk NR 與 FNR 不同

  • 處理多個文件
➜ awk '{print "ordinal number: " FNR " - " $0}' test1.txt test2.txt
Linux awk 系列文章之 awk NR 與 FNR 不同

awk NR == FNR的示例

NR == FNR:

1.讀取兩個或多個文件時,確定它是否是第一個文件;
2.打印文件關聯內容;

1. 判斷是否是第一個文件

➜ awk '{if(NR==FNR) {print "No.1 :" FNR " ->" $0}else{print "No.2 :"FNR " ->"$0}}' test1.txt test2.txt
Linux awk 系列文章之 awk NR 與 FNR 不同

2.打印文件關聯內容

#兩個文件:


➜ awk cat test4.txt
apple|00009
jerry|00008
➜ awk cat test5.txt
00009|55|09
00009|100|03
00009|59|04
00009|89|10
00008|55|09
00008|79|12


#想要得到的結果:

apple|00009|55|09
apple|00009|100|03
apple|00009|59|04
apple|00009|89|10
jerry|00008|55|09
jerry|00008|79|12
➜ awk -F "|" '{if(NR==FNR){z[$2]=$1}else{print z[$1] "|" $0}}' test4.txt test5.txt
Linux awk 系列文章之 awk NR 與 FNR 不同


分享到:


相關文章: