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}'
賈乃亮 李小璐
王寶強 馬蓉
鄧超 孫儷