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

2019-08-08 11:42:20 +08:00
 fatbear001

文件结构如下:

	|   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	|
1776 次点击
所在节点    问与答
13 条回复
rrfeng
2019-08-08 11:43:29 +08:00
awk '!a[$2$2$3$4]++' file.csv

自己设 -F 分隔符。

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

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

还是赶紧写吧
no1xsyzy
2019-08-08 15:25:02 +08:00
拜托 2w 就是 Python 效率也够的,可能拿 brainfuck 写效率都不是问题
reus
2019-08-08 15:46:41 +08:00
2 万行随便写啊
rockyou12
2019-08-08 15:48:05 +08:00
2w 你随便写都很快啦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/590086

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX