基于java中的列对选项卡分隔文件进行排序

时间:2012-02-23 08:06:14

标签: java sorting tab-delimited tab-delimited-text

我有大量(大约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命令的系统命令。我将感激你的帮助。

1 个答案:

答案 0 :(得分:0)

就像Dhruv的评论所说,其中一种可能的方法是使用外部排序。

您要做的是创建一个对象,该对象封装文件的每一行并创建一个自定义比较器,根据您需要的标准进行排序。请记住,您不需要将该行上的每一列映射到Object属性,您只需要一个属性,其中包含每行的第一列用作比较属性,另一个属性包含整个String。 / p>

将一行文件逐行加载到所述对象类型的集合中。使用自定义比较器对其进行排序将集合写入临时文件。重复,直到原始文件结束。

你最终会得到几个较小的文件,按自己排序。现在,您使用外部排序的“合并”步骤来创建包含所有已排序行的新文件。读取每个文件的第一行,将最小的文件写入已排序的文件,从具有最小文件的文件中读取新行。重复,直到所有临时文件都为空。

完成。