awk 進階,百萬行檔案取交集
阿新 • • 發佈:2018-11-16
今天我們說的不是簡單的交集,而是如下示例:
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,強大!