我的一个巨大的文本文件(最多2 GiB)包含其中每一行的大约100个精确重复项(对我而言,这是无用的,因为该文件是类似CSV的数据表)。
我需要的是在保持原始序列顺序的同时删除所有重复(最好是牺牲掉,但这可以显着提高性能)。结果,每一行都是唯一的。如果有100条相等的行(通常重复项分布在整个文件中,并且不会成为邻居),则只剩下其中一种。
我已经用Scala编写了一个程序(如果您不了解Scala,请考虑使用Java)来实现此目的。但是,也许有更快的C编写的本机工具能够更快地做到这一点?
更新:awk '!seen[$0]++' filename
只要文件接近2 GiB或更小,该解决方案对我来说似乎就很好,但是现在我要清理8 GiB文件就不再起作用了。在配备4 GiB RAM和配备4 GiB RAM和6 GiB交换功能的64位Windows 7 PC的Mac上,似乎占用了无限空间。鉴于这种经验,我对在具有4 GiB RAM的Linux上尝试它并不感到热心。
awk
在#bash(Freenode)上看到的解决方案:
awk '!seen[$0]++' filename
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句