私は受託番号を持つファイルを持っています。これらの数値は、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のオーバーヘッドを削減すること
わかりませんが、これが役立つかもしれません:https://stackoverflow.com/questions/42239179/fastest-way-to-find-lines-of-a -text-file-from-another-larger-text -file-in-bash – Sundeep
より完全な[例](https://stackoverflow.com/help/mcve) – Thor
@Sundeepに感謝しますが、ユースケースは違っていますか? – jcoder8