2017-08-16 22 views
3

私は受託番号を持つファイルを持っています。これらの数値は、IDに対して別のファイルにマップする必要があり、その情報と補完的なmysqlデータベース情報は3番目のファイルを作成します。私はファイル(145Gb)を読み込み、アクセス番号を抽出し、grepコマンドを使用して対応するIDをマッピングファイル(10Gb)に見つける簡単なプログラムを持っています。 だから各アクセッション番号のために私は1つのgrepを実行しています:グレープを1つのファイルに複数回

$ grep -m1 myAccession myMappFile 

この操作は、数回行われます。同じファイルに何度も何度もアクセスしているので、インデックスを作成する簡単な方法や、パフォーマンスを向上させるbashの魔法を作成する方法があるかどうかを知りたいのですが、加盟 〜3時間で250kのアクセス権を処理しました。

$ grep 'accession1\|accession2\|accession3' -m3 myMappFile 

しかし、これは十分ではありません。したがって、イムは、私はいくつかは、複数のアクセッションと1つのgrepを送る向上させることができますことを認識して ... 45Mは(22日!!)〜540hの周りにかかります手頃な価格ではありませんどのプロセス。

は多分何かのように:

$ grep 'accession1\|accession2\|accession3' -m3 myIndexedMappFile 

注:データベース・プロセスがすでに改善され、確認のためのボトルネックはgrepの上に配置されているので、私は大幅にハッシュマップを使用して、データベースへのアクセスを削減しました。

アイデア?

更新:

*File with accession:* 
>Accession_A other text 
other line 
... 
... 
>Accession_B more text 
more lines 
... 

*File with mappings* 
Col1 Accession_A ID-X Col4 
Col1 Accession_B ID-Y Col4 
... 
... 

だから、プログラムがアクファイル(行ずつ)が、マッピングファイルにその加盟をgrep、Accession_Nを抽出読み込みます。

Accession_B ID

Accession_A ID-X DB-DATA:得られた行で、IはID値を抽出し、私はファイルが終わりになるようにIDとIは、データベースへのより多くのデータを検索します-Y DB-DATA

ファイルがソートされていません。 DBのオーバーヘッドを避けるために{ID、DB-DATA}の値をハッシュマップに入れました。

プログラムはのRuntime.execのオーバーヘッドを削減すること

+0

わかりませんが、これが役立つかもしれません:https://stackoverflow.com/questions/42239179/fastest-way-to-find-lines-of-a -text-file-from-another-larger-text -file-in-bash – Sundeep

+0

より完全な[例](https://stackoverflow.com/help/mcve) – Thor

+0

@Sundeepに感謝しますが、ユースケースは違っていますか? – jcoder8

答えて

0

...私は一度に複数のアクセッションではgrepを実行してみてくださいましたが、それはほぼ同じで呼び出して、grepコマンドをexecしするためにJavaを使用するプロセスをコード化されています私は@ sundeepの提案に取り組み、処理時間の点で解決策を見つけましたが、ユーザーが同じファイルに対していくつかのgrepを実行する必要がある場合でも、ユースケースを改善するためのより良い方法だと思います。私が何をしたか されました:

grep -e "^>" myBigFile.fa | cut -d">" -f2 | cut -d" " -f1 > all_accession.txt 

が続い

grep -F -f all_accession.txt myBigMappingFile > matchFile.txt 

最後に処理するために、Javaプログラムを使用してファイルを参照してはgrepを使用します。

まず、最初のファイルからすべてのアクセッション番号を抽出しますIDを読み込んでターゲットファイルを作成するには、matchFile.txtを使用します(プロセスでは、IDを読み取って補完情報をDBで調べるだけです)。

これらの3つのステップは3.5時間に実行され、これはより受け入れやすいものです。 しかし、私が最初から試してきたように、すべてを一緒に実行して以来、ソリューションは完全ではありません。他の出力ファイル、最も重要なのはマッピングファイルに対応するIDを持たないアクセス権を持つファイルです。選択範囲を反転させるために-vのparamと

grep -F -v -f all_accession.txt myBigMappingFile > matchFile.txt 

のgrepが、そのコマンドも上の一致を見つけるdoesntのmyBigMappingFileにレコードを与えます。したがって、私はそのファイルを生成するには、次のコマンドを使用してみました必要な出力ではないall_accession.txtファイル....

関連する問題