V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fatbear001
V2EX  ›  问与答

求助: Go 读取 2W 条记录的 CSV、EXCEL 文件,根据记录前 4 列(A B C D)去重,怎么实现效率比较高。

  •  
  •   fatbear001 · 2019-08-08 11:42:20 +08:00 · 1960 次点击
    这是一个创建于 1969 天前的主题,其中的信息可能已经有所发展或是发生改变。

    文件结构如下:

    	|   A	|   B	|   C	|   D	|   E	|   F	|   G	|   H	|   I	|   J	|
    
    	|  xx	|  xx	|  xx	|  xx	|  xx	|  xx	|  xx	|  xx	|  xx	|  xx	|
        
        	|  xx   |  xx	|  xx	|  xx	|  xx	|  xx	|  xx	|  xx	|  xx	|  xx	|
    
    13 条回复    2019-08-08 15:48:05 +08:00
    rrfeng
        1
    rrfeng  
       2019-08-08 11:43:29 +08:00
    awk '!a[$2$2$3$4]++' file.csv

    自己设 -F 分隔符。

    2w 条要啥效率
    fatbear001
        2
    fatbear001  
    OP
       2019-08-08 11:48:34 +08:00
    @rrfeng 额,在 go 程序中怎么实现啊?
    SuperMild
        3
    SuperMild  
       2019-08-08 11:49:00 +08:00
    2 万条……效率最高的就是你自己写起来最熟练最快的方法。
    fatbear001
        4
    fatbear001  
    OP
       2019-08-08 11:51:11 +08:00
    @SuperMild 现在想的是循环添加进 map 中。。
    SuperMild
        5
    SuperMild  
       2019-08-08 11:52:55 +08:00
    @fatbear001 直接写吧,很可能马上就搞定了。
    rrfeng
        6
    rrfeng  
       2019-08-08 11:53:06 +08:00
    @fatbear001
    就这么写啊,你有问的功夫都写完了,并且运行了十万遍了。

    如果有 2000w 还需要考虑一下效率问题……
    如果怕行太长占内存就记录行号当索引,完了再读。
    stanjia
        7
    stanjia  
       2019-08-08 11:54:20 +08:00
    @rrfeng awk 是正解~~~
    8bit
        8
    8bit  
       2019-08-08 12:50:32 +08:00 via Android
    不先估算下重复率吗?
    loading
        9
    loading  
       2019-08-08 13:01:32 +08:00 via Android   ❤️ 2
    写一周,程序最后跑下来就是 1 分钟
    写半天,程序最后跑下来就是 3 分钟
    Vegetable
        10
    Vegetable  
       2019-08-08 13:26:30 +08:00
    随便写了一个基于前 4 个元素拼接字符串和 map[string]struct{}去重的例子,在只有 4 列整数时,2w 行耗时 29ms.我觉得这玩意再怎么效率低也没有纠结的必要.

    还是赶紧写吧
    no1xsyzy
        11
    no1xsyzy  
       2019-08-08 15:25:02 +08:00
    拜托 2w 就是 Python 效率也够的,可能拿 brainfuck 写效率都不是问题
    reus
        12
    reus  
       2019-08-08 15:46:41 +08:00
    2 万行随便写啊
    rockyou12
        13
    rockyou12  
       2019-08-08 15:48:05 +08:00
    2w 你随便写都很快啦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2128 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:22 · PVG 09:22 · LAX 17:22 · JFK 20:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.