2012-02-23 75 views
0

我有巨大的(大約4GB)文本文件需要排序。這是如此巨大,它有6千個coumns和數千行。用bash腳本進行排序非常簡單。不過,我需要跨平臺的Java程序來對文件進行排序。我用this,但我得到了與排序後的輸出文件相同的結果文件。輸入文件的根據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命令。我會欣賞你的幫助。

+0

爲什麼不做外部排序? http://en.wikipedia.org/wiki/External_sorting – 2012-02-23 08:26:36

回答

0

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

你想要做的是創建一個對象來封裝你的文件的每一行,並創建一個自定義的比較器,按照你所需要的標準進行排序。請記住,您不需要將行上的每一列映射到Object屬性,只需將包含每行第一列的屬性用作比較屬性,並將另一個屬性包含整個String即可。

將文件的一行一行一行地逐行加載到所述對象類型的集合中。使用您的自定義比較器進行排序將集合寫入臨時文件。重複,直到原始文件的結尾。

你最終會得到幾個較小的文件,按它們自己排序。現在使用外部排序的「合併」步驟來創建一個包含所有排序行的新文件。讀取每個文件的第一行,將其中最小的一行寫入已排序的文件,從文件中讀取具有最小行數的新行。重複,直到所有臨時文件都爲空。

完成。

相關問題