我有一个非常大的数据文件(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
使用'sort -u',它可能很聪明,只会使用您估计的10%的临时空间。 –
@thatotherguy oooh ...我不知道这个选项。我会给它一个旋风。 –
我认为问题是使用排序命令,因为你需要可用空间的文件大小来对其进行排序...... –