5

いくつかの大きなデータ ファイル (最大 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 番目のファイルのデータはすべて、タイムスタンプ順に並んでいます。最初のタイムスタンプを使用して2番目のファイルをgrepし、タイムスタンプと4番目のデータ項目を出力ファイルに出力したいと思います。私はこれを使用しています:

grep -wf time.stamps data.file | awk '{print $1 "\t" $4 }'  >> output.file

これは、各データ ファイルを完了するのに約 1 日かかります。問題は、このコマンドが time.stamps のすべての行についてデータ ファイル全体を検索することですが、最後のデータ ポイントから検索する必要があるだけです。このプロセスをスピードアップする方法はありますか?

4

3 に答える 3

4

awk</p>

awk 'NR==FNR{a[$1]++;next}($1 in a){print $1,$4}' timestampfile datafile
于 2013-07-03T21:03:52.630 に答える
1

JS웃のawk解決策はおそらく進むべき道です。joinが利用可能で、無関係な「データ」の最初のフィールドが数値でない場合、ファイルが同じ順序であるという事実を利用して、並べ替え手順を回避できます。この例では、Linux で bash プロセスの置換を使用しています

join  -o2.1,2.4 -1 1 -2 1 key.txt <(awk '$1 ~ /^[[:digit:]]+$/' data.txt)
于 2013-07-03T21:24:36.833 に答える
0

-f filename「grep」には、ファイル名からパターンを取得してマッチングを行う、少し使用されるオプションがあります。ソリューションに勝る可能性が高くawk、タイムスタンプをソートする必要はありません。

于 2013-07-04T01:16:04.527 に答える