所以我有一个非常大的文件(大约 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)
这在您的机器上应该容易得多。
归档时间: |
|
查看次数: |
946 次 |
最近记录: |