今天我们说的不是简单的交集,而是如下示例:
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,强大!