2012-02-23 1 views
0

ソートする必要がある膨大な(約4GB)テキストファイルがあります。それは非常に巨大で、6千のクーンと数千の行を持っています。 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 
. 
. 
. 

をソートする入力ファイルの

パートIは、UNIXコマンドを実行するシステムコマンドを使用せずにJavaで最初の列に関しては、このタブ区切りファイルをソートする必要があります。私はあなたの助けに感謝します。

+0

なぜあなたは外部の並べ替えをしないのですか? http://en.wikipedia.org/wiki/External_sorting –

答えて

0

Dhruvのコメントと同様に、考えられるアプローチの1つは外部の並べ替えを使用することです。

ファイルの各行をカプセル化し、必要な基準で並べ替えるカスタムコンパレータを作成するオブジェクトを作成します。行のすべての列をObjectプロパティにマップする必要はなく、単に比較プロパティとして使用する各行の最初の列を含むプロパティと、String全体を含む別のプロパティを持つことができます。

ファイルのチャンクを1行ずつオブジェクトタイプのコレクションにロードします。カスタムコンパレータを使用してソートします。コレクションを一時ファイルに書き込みます。元のファイルの最後まで繰り返します。

あなた自身でソートされたいくつかの小さなファイルで終わるでしょう。外部ソートの「マージ」ステップを使用して、ソートされたすべての行を含む新しいファイルを作成します。各ファイルの最初の行を読み、ソートされたファイルに最小のものを書き込み、最小のものから新しい行を読み込みます。すべての一時ファイルが空になるまで繰り返します。

完了。

関連する問題