Unix对部分有序的数据集进行sorting

所以我有一个非常大的文件(大约10GB),需要对它进行sorting,就像使用“sorting”工具一样,但更有效。

问题是,我没有内存,CPU的能力,时间,也没有自由的交换空间来供电。

好的是文件已经部分sorting了(我可以说每行与最终位置的距离都小于某个值N)。 这种提醒我为此目的使用堆大小为N的heapsort的经典计算机级示例。

问题:是否有一些unix工具已经有效地执行了,还是我需要自己编写一个?

谢谢-mk

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

split --lines=100000 large_file file_part. 

然后通过使用正常的sorting对每一个进行sorting

 for suffix in `ls file_part.* | cut -f2 -d.` do sort file_part.${suffix} > file_sorted.${suffix} done 

你可以通过合并sorting来组合

 sort -m file_sorted.* 

这应该是在你的机器上更容易。

sorting,正在使用和R-way合并sortingalgorithm。 做你工作的最快方法是:

 sort myfile 

这意味着O(n logn)时间复杂度和O(n)时间。

如果你划分数据,你可能会花时间来支付。

上面的代码有一个问题。 与sorting-m文件不保证相互sorting。

从unix手册:

  -m, --merge merge already sorted files; do not sort 

例如

file1:abcklq file2:dem

 sort -m file1 file2 

abcklqdem

这是不是在sorting。

此外,元素在小于N的位置的事实并不保证上述代码的sorting输出:

文件:aebcdhfg

在N = 3的文件中,所有元素都不到3个位置

file1:hfg,file2:bcd,file3:ae

 sort file1 

产生:

file1:fgh,file2:bcd,file3:ae

 sorm -m file3 file2 file1 

输出:

aebcdfgh

这是错误的。