如何从linux中的一个非常大的文件中获取独特的行?

时间:2017-07-27 17:30:16

标签: linux large-files uniq

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

通常我会用,比如说:

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

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

我原本以为我可以使用split,并且可以在一个新文件中一次在500K行上进行流uniq。有没有办法做这样的事情?

我以为我可能会做类似

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

但我无法找到正确截断文件的方法。

1 个答案:

答案 0 :(得分:4)

使用def do_something # some code, then... object_b = ClassB.new(params) end 代替sort -u

这允许sort | uniq更早地丢弃重复项,而GNU coreutils足够聪明,可以利用这一点。