zoukankan      html  css  js  c++  java
  • 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,强大!

     
  • 相关阅读:
    ProxySQL!像C罗一样的强大!
    zookeepr 临时节点
    JavaScript 的闭包用于什么场景
    JavaScript 的闭包用于什么场景
    JavaScript 的闭包用于什么场景
    JavaScript 的闭包用于什么场景
    随笔
    随笔
    随笔
    随笔
  • 原文地址:https://www.cnblogs.com/slim-liu/p/9968140.html
Copyright © 2011-2022 走看看