shell腳本--awk數組處理多個文件

awk是可以同時處理多個文件的,一般會用到變量NR和FNR,NR會順序記錄所有文件的行(放在一起往後面數),FNR是單獨記錄每個文件的行。

測試文件:

[root@172-0-10-222 myscripts]# cat testfile
賈乃亮 謝娜 
王寶強 林心如
鄧超 楊冪
[root@172-0-10-222 myscripts]# cat testfile2
張傑 李小璐
霍建華 馬蓉
劉愷威 孫儷

看NR和FNR所表示的內容:

[root@172-0-10-222 myscripts]# awk '{print NR,FNR}' testfile testfile2
1 1
2 2
3 3
4 1
5 2
6 3

如何知道當前處理的是第一個文件還是第二個文件呢?

NR==FNR:表示第一個文件

NR!=FNR:表示第二個文件

 

需求:取第一個文件的第一列和第二個文件的第二列組合

[root@172-0-10-222 myscripts]# awk 'NR==FNR{arr[NR]=$1}NR!=FNR{print arr[FNR],$2}' testfile testfile2
賈乃亮 李小璐
王寶強 馬蓉
鄧超 孫儷

分析:

處理第一個文件:通過arr[NR]記錄第一個文件的第一列,也就是arr[1]=賈乃亮,arr[2]=王寶強,arr[3]=鄧超。

處理第二個文件:此時的NR和FNR分別爲4 5 6和1 2 3,因此這裏先輸出arr[FNR]也就是arr[1]、arr[2]、arr[3],然後輸出第二個文件的第二列。

 

補充:這個問題還有一個好理解的處理方法,就是先輸出第一個文件的第一列到一個文件中,然後輸出第二個文件的第二列到另一個文件中,將這兩個文件中的內容paste到一起。也可以得到結果。

 

或者用如下方法也行:

[root@172-0-10-222 myscripts]# paste testfile testfile2 | awk '{print $1,$4}'
賈乃亮 李小璐
王寶強 馬蓉
鄧超 孫儷

 

發佈了71 篇原創文章 · 獲贊 5 · 訪問量 6457
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章