我有一个非常大的文件,超过100GB(数十亿行),我想在内存有限的unix系统上尽可能快地进行两级排序.这将是一个大型perl脚本中的一步,所以我想尽可能使用perl.
那么,我该怎么做呢?我的数据如下:
A 129 B 192 A 388 D 148 D 911 A 117
……但数十亿行.我需要先按字母排序,然后按数字排序.是否更容易使用unix排序,比如……
sort -k1,2 myfile
或者我可以以某种方式在perl中完成所有这些操作吗?我的系统将有16GB内存,但文件大约100GB.
谢谢你的任何建议!
解决方法
UNIX排序实用程序可以通过在磁盘空间上创建临时工作文件来处理大型数据的排序(例如,大于工作的16GB RAM).
所以,我建议你按照你的建议简单地使用UNIX排序,调用-T tmp_dir选项,并确保tmp_dir有足够的磁盘空间来容纳将在那里创建的所有临时工作文件.
顺便说一句,这将在previous SO question.中讨论