私はいくつかの大きなデータファイル(〜100MB-1GBのテキスト)と、関心のあるデータポイントをインデックスする数万のタイムスタンプのソートされたリストを持っています。タイムスタンプファイルは次のようになります。大きなファイルを徐々にグレープする
12345
15467
67256
182387
199364
...
とデータファイルは、次のようになります。
Line of text
12345 0.234 0.123 2.321
More text
Some unimportant data
14509 0.987 0.543 3.600
More text
15467 0.678 0.345 4.431
二ファイル内のデータはすべて、タイムスタンプの順です。最初のタイムスタンプを使用して2番目のファイルをgrepし、タイムスタンプと4番目のデータ項目を出力ファイルに出力します。私はこれを使用しています:
grep -wf time.stamps data.file | awk '{print $1 "\t" $4 }' >> output.file
これは、各データファイルを完了するのにかかる日数です。問題は、このコマンドはtime.stamps内のすべての行についてデータファイル全体を検索しますが、最後のデータポイントから検索する必要があるだけです。このプロセスをスピードアップする方法はありますか?
+1:これはどういう仕組みか分かりましたが、スクリプトの最初の部分がすべてのタイムスタンプを配列 'a'にロードしていて、2番目の部分がデータファイルの最初のフィールドの配列を見ると、これはすべてのタイムスタンプを格納するだけのメモリが必要な非常に洗練されたソリューションであることがわかりました。 – Simon
@Simonあなたは素早く学習する友達です。それはまさにそのことです。パフォーマンスをさらに向上させるには、配列要素が一致した後に配列要素を削除することができます。その要素がファイルの下で再び発生した場合、それは一致しませんが、次のスキャンのサイズが小さくなります。 –
ニース!前に8時間かかっていた仕事は12秒かかります。 – user2548142