2017-07-27 48 views
0

我有一个非常大的数据文件(255G; 3,192,563,934行)。不幸的是,我只有204G的可用空间(没有其他设备可以使用)。我做了一个随机样本,发现在一个给定的例如100K行中,大约有10K个独特行......但文件没有排序。如何在linux中从一个非常大的文件中获得独特的行?

通常我会用,说:

pv myfile.data | sort | uniq > myfile.data.uniq 

,只是让它运行一天左右。这在这种情况下不起作用,因为我没有足够的空间留在设备上用于临时文件。

我在想我可以使用split,也可以在一个新的文件中一次将500K行的流式传输uniq。有没有办法做这样的事情?

我想我也许可以做这样的事情

tail -100000 myfile.data | sort | uniq >> myfile.uniq && trunc --magicstuff myfile.data 

,但我不能想出一个办法,以正确截断该文件。而不是sort | uniq

+0

使用'sort -u',它可能很聪明,只会使用您估计的10%的临时空间。 –

+0

@thatotherguy oooh ...我不知道这个选项。我会给它一个旋风。 –

+0

我认为问题是使用排序命令,因为你需要可用空间的文件大小来对其进行排序...... –

回答

1

使用sort -u这使得sort丢弃重复前面,和GNU的coreutils足够聪明,利用这一优势。

+0

这对我来说非常好。它最终使用可以忽略的磁盘空间。 –

相关问题