AWK實現多文件讀取和處理


 

當我們使用awk整合文件的時候,如果是兩個文件,我們經常會用NR==FNR和NR!=FNR兩個來指定讀取第一個或者是第二個文件,但是如果涉及到三個及以上文件這種方式就不適用,除非我們使用前面兩個文件的方式,生成第三者,在用第三者進行整合,也是可以實現,但是這樣子多了個第三者,而且顯得比較笨拙。我們可以使用如下三種通用方式來實現awk多文件的讀取和處理:

第一種: awk 'ARGIND==1{...}ARGIND==2{...}ARGIND==3{...} ...' file1 file2 file3 ...

第二種:awk 'FILENAME==ARGV[1]{...}FILENAME==ARGV[2]{...}FILENAME==ARGV[3]{...}...' file1 file2 file3 ...

第三種:awk 'FILENAME=="file1"{...}FILENAME=="file2"{...}FILENAME=="file3"{...}...' file1 file2 file3 ...

以上方式可以用來處理兩個及以上文件。如下是針對以上的一個示例:

本例共使用三個文件,分別是hh、zz、xx

hh文件內容:

1234 huang
456 zhi

789 xiong

zz文件內容:

13141234 zhang
1314456 dong

1314789 hua

xx文件內容:

1234 || 13141234
456 Love 1314456

789 || 1314789

例一:將xx文件當中的第一列和hh第一列一樣的用hh的第二列替換

命令:awk 'NR==FNR{a[$1]=$2}NR!=FNR{print a[$1],$2,$3}' hh xx

執行結果如下

NR==FNR代表讀第一個文件

a[$1]=$2代表將第一個文件即(hh)當中第一列作為a數組的鍵,$2作為a[$1]的值

NR!=FNR代表讀第二個文件

print a[$1],$2,$3 代表將第二個文件(即xx)當中的第一個列作為a數組的鍵,即a[$1],此時得到的值就是在第一個文件給a[$1]賦予的值

例二:將xx文件當中的第一列以及第三列分別和hh以及zz第一列對應起來,分別取對應hh和zz第二列的值替換到xx文件當中

命令:awk 'ARGIND==1{a[$1]=$2}ARGIND==2{b[$1]=$2}ARGIND==3{print a[$1],$2,b[$3]}' hh zz xx 或者采用其他兩種方式

執行結果如下:

ARGIND==1代表處理第一個文件

ARGIND==2代表處理第二個文件

ARGIND==3代表處理第三個文件.........類似

數組鍵值對處理邏輯與例一當中一致

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM