かなり大きなファイルがあり、1 ~ 1.5 GB のオーダー (ほとんどがログ ファイル) と、csv に簡単に解析できる生データを組み合わせたもので、後でグラフ化して一連のグラフ イメージを生成することになっています。
現在、bash スクリプトを使用して生データを csv ファイルに変換し、グラフ化する必要がある数値のみを含むようにしてから、それを gnuplot スクリプトにフィードしています。しかし、このプロセスは非常に遅いです。cut
いくつかのパイプされたstr
などを 1 つのコマンドに置き換えることで、bash スクリプトを高速化しようとしましたawk
が、これにより速度は改善されましたが、全体は依然として非常に低速です。
そのため、このプロセスにはもっと優れたツールがあると信じ始めています。私は現在、このプロセスを python+numpy または R で書き直そうとしています。私の友人は、JVM を使用することを提案しました。それを行う場合は、clojure を使用しますが、JVM がどのように機能するかはわかりません。
私はこの種の問題に対処した経験があまりないので、どのように進めればよいかアドバイスをいただければ幸いです。ありがとう。
編集:また、生成された中間データ、つまり csv を (ディスクに) 保存したいので、再生成する必要はありません。
編集 2:生データ ファイルには 1 行に 1 つのレコードがあり、そのフィールドは区切り文字 ( |
) で区切られています。すべてのフィールドが数値であるとは限りません。出力csvで必要な各フィールドは、入力レコードに特定の式を適用することによって取得されます。これは、入力データの複数のフィールドを使用する場合があります。出力 csv には 1 行あたり 3 ~ 4 フィールドがあり、1 ~ 2、1 ~ 3、1 ~ 4 フィールドを (場合によっては) 棒グラフにプロットするグラフが必要です。それがより良いイメージを与えることを願っています。
編集 3: @adirau のスクリプトを少し変更しましたが、かなりうまく機能しているようです。データを読み取り、プロセッサ スレッドのプールに送信し (疑似処理、スレッド名をデータに追加)、それを別のコレクタースレッドを介して出力ファイルに集約しています。
PS: この質問のタグ付けについてはよくわかりません。お気軽に修正してください。