簡體   English   中英

基於Java中的列對制表符分隔文件進行排序

[英]Sorting tab delimited file based on column in java

我有一個巨大的(大約4GB)文本文件需要排序。 它是如此之大,以至於它有6000個列和數千行。 使用bash腳本進行排序非常容易。 但是,我需要跨平台的Java程序來對文件進行排序。 我使用 ,但是得到的結果文件與排序的輸出文件相同。

輸入文件中要排序的部分

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命令的系統命令。 我將感謝您的幫助。

就像Dhruv的評論所說,一種可能的方法是使用外部排序。

您要做的是創建一個封裝文件每一行的對象,並創建一個自定義比較器,該比較器將根據所需條件進行排序。 請記住,您不需要將行上的每一列都映射到Object屬性,只需擁有一個包含每行第一列作為比較屬性的屬性,以及另一個包含整個String的屬性。

逐行將文件的一部分加載到所述Object類型的Collection中。 使用自定義比較器對其進行排序。 將集合寫入一個臨時文件。 重復直到原始文件的末尾。

您最終將得到幾個較小的文件,這些文件將按自己排序。 現在,您可以使用外部排序的“合並”步驟來創建一個包含所有已排序行的新文件。 讀取每個文件的第一行,將其中最小的一行寫入已排序的文件,然后從文件中讀取最小的一行開始。 重復直到所有臨時文件都為空。

做完了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM