AWK實現多檔案讀取和處理

2021-08-20 09:54:17 字數 1489 閱讀 2390

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

第一種: awk 'argind==1argind==2argind==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==fnrnr!=fnr' 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==1argind==2argind==3' hh zz xx或者採用其他兩種方式

執行結果如下:

argind==1代表處理第乙個檔案

argind==2代表處理第二個檔案

argind==3代表處理第三個檔案.........類似

陣列鍵值對處理邏輯與例一當中一致

awk多檔案處理

a.txt內容如下 a 150 b 200 c 100 b.txt內容如下 abcd a 12.5 bbbb b 35 cccc c 42 dddd d 21 想要通過a.txt b.txt得到ba.txt abcd a 12.5 150 bbbb b 35 200 cccc c 42 100 dd...

awk 多檔案操作2種實現方法

我們經常會將2個有關聯文字檔案進行合併處理。分別從不同檔案獲取需要的列,然後,整體輸出到一起。awk進行多檔案處理時候,常常會遇到2個方面問題,第乙個是怎麼樣合併多個檔案為乙個檔案。第二個問題就是怎麼樣將多行合併為一行顯示。我這裡說下我的處理2種方法,還有實現思路。例項文字 1 2 3 4 5 6 ...

awk 多檔案操作2種實現方法

我們經常會將2個有關聯文字檔案進行合併處理。分別從不同檔案獲取需要的列,然後,整體輸出到一起。awk進行多檔案處理時候,常常會遇到2個方面問題,第乙個是怎麼樣合併多個檔案為乙個檔案。第二個問題就是怎麼樣將多行合併為一行顯示。我這裡說下我的處理2種方法,還有實現思路。例項文字 chengmo cent...