1. 程式人生 > >awk 進階,百萬行檔案取交集

awk 進階,百萬行檔案取交集

今天我們說的不是簡單的交集,而是如下示例:

file1:

as,er,gf,1212
kl,iop,1213
78,jkl,uio,jki,1214
vbnm,yuoi,678i,1215
sadfasdf,werqwerqw,qwerqwe,11111
uioupoiuiop,jklghj,217890

file2:

1212
1213
1214

說下需求,以f2為準,匹配f1,並輸出交集

如果資料量很小可以直接使用grep -f 來實現:

grep -f f2 f1
as,er,gf,1212
kl,iop,1213
78,jkl,uio,jki,121

但是如果像我的生產例項一樣,100w的資料量,就會出問題,

看來這樣操作不僅費時,還很耗記憶體,

接著介紹我們今天的主角,強大的awk:

time awk  -F',' 'NR==FNR{a[$1]++}NR>FNR{if($NF in a){print}}' oss_uuid front_90w-1.txt >>test

我們看下用時:

僅僅用了7s

 

簡單解釋一下上面的awk命令:

time:列印命令執行的時間

 
 
 
NR==FNR{a[$1]++} #處理第一檔案,也就是 oss_uuid 換成我們示例的,就是file2,將檔案轉換為陣列格式
 
 
 
NR>FNR{if
($NF in a){print}} #處理第二個檔案,也就是 front_90w-1.txt,換成我們示例中,就是file1,將最後一列去file2中去做匹配,並輸出匹配到的行。

 

awk,強大!