我有大量(大约4GB)的文本文件需要排序。它是如此巨大,它有6000个coumns和数千行。使用bash脚本排序非常容易。但是,我需要跨平台的java程序来对文件进行排序。我使用了this,但是我得到了与排序输出文件相同的结果文件。
要排序的输入文件的一部分
SNP_ID Sub_0001 Sub_0002 Sub_0003 Sub_0004 ...
cnv3p502 0 0 0 0
rs3115860 1 0 1 1
rs3131967 1 0 1 1
rs3115850 1 0 1 1
rs12124819 0 0 0 0
rs2519031 1 0 1 1
.
.
.
我需要根据java中的第一列对此制表符分隔文件进行排序,而不使用执行unix命令的系统命令。我将感激你的帮助。
答案 0 :(得分:0)
就像Dhruv的评论所说,其中一种可能的方法是使用外部排序。
您要做的是创建一个对象,该对象封装文件的每一行并创建一个自定义比较器,根据您需要的标准进行排序。请记住,您不需要将该行上的每一列映射到Object属性,您只需要一个属性,其中包含每行的第一列用作比较属性,另一个属性包含整个String。 / p>
将一行文件逐行加载到所述对象类型的集合中。使用自定义比较器对其进行排序将集合写入临时文件。重复,直到原始文件结束。
你最终会得到几个较小的文件,按自己排序。现在,您使用外部排序的“合并”步骤来创建包含所有已排序行的新文件。读取每个文件的第一行,将最小的文件写入已排序的文件,从具有最小文件的文件中读取新行。重复,直到所有临时文件都为空。
完成。