部分有序数据集的 Unix 排序

exa*_*exa 7 unix files sort

所以我有一个非常大的文件(大约 10GB)并且需要对它进行排序,就像使用“排序”实用程序一样,但更有效。

问题是,我没有内存、CPU 能力、时间,也没有可用的交换空间来支持整个排序。

好消息是文件已经部分排序(我可以说每一行与其最终位置的距离都小于某个值 N)。这让我想起了经典的计算机级示例,为此目的使用堆大小为 N 的堆排序。

问题:是否有一些 Unix 工具已经有效地做到了这一点,还是我需要自己编写一个代码?

谢谢-mk

Dec*_*ado 12

将文件拆分为更小的部分并对其进行排序会更容易。分开:-

split --lines=100000 large_file file_part.
Run Code Online (Sandbox Code Playgroud)

然后使用正常排序对每个排序

for suffix in `ls file_part.* | cut -f2 -d.` 
do 
  sort file_part.${suffix} > file_sorted.${suffix} 
done
Run Code Online (Sandbox Code Playgroud)

然后您可以通过合并排序进行组合

sort -m file_sorted.*
Run Code Online (Sandbox Code Playgroud)

这在您的机器上应该容易得多。