現在、アプリケーションのパフォーマンスを分析しています。まず、アプリケーションによって生成されたログを確認して実行するのに許容されるよりも長い時間がかかるビジネスロジックジョブを識別します。
ログファイルの一部は次のとおりです。
2014-07-02 18:03:20,269 INFO [ROOT] - Task1. xmlRecord Id :35165 processed
2014-07-02 18:05:20,269 INFO [ROOT] - Task1. xmlRecord Id :35162 processed
2014-07-02 18:15:20,269 INFO [ROOT] - Task1. xmlRecord Id :35164 processed
2014-07-02 18:20:20,269 INFO [ROOT] - Task2. xmlRecord Id :35165 processed
私の要件は、各タスクの実行に費やされた合計時間を見つけることです。たとえば、xmlRecord 35165のタスク2の所要時間= xmlRecord 35165のタスク2の終了時間 - xmlRecord 35165のタスク1の終了時間です。
だから、私は次のように同じxmlRecord IDを持つすべてのログステートメントをグループ化する方法を望んでいます。
2014-07-02 18:03:20,269 INFO [ROOT] - Task1. xmlRecord Id :35165 processed
2014-07-02 18:20:20,269 INFO [ROOT] - Task2. xmlRecord Id :35165 processed
2014-07-02 18:05:20,269 INFO [ROOT] - Task1. xmlRecord Id :35162 processed
2014-07-02 18:15:20,269 INFO [ROOT] - Task1. xmlRecord Id :35164 processed
上記のようにすべてのログステートメントをグループ化できる場合、Task2はxmlRecord 35165を処理するのに17分かかりました。
ここに示されているログは、私のアプリケーションから印刷された正確なログではなく、単なる例です。特定のXML IDのログが常に順番に表示されるように、すべてのログステートメントをグループ化できるようにしたいです。
私はシェルに少し錆びていて、誰かが車輪を再発明するのに時間を無駄にしないように、すでにこれを行うライナーやスクリプトを教えてくれたら幸いです。
ベストアンサー1
初心者として列を基準にソートしてみてはいかがでしょうかxmlRecord Id
? :-
sort -k 9 -o <out.log> <in.log>
番号順にグループ化する必要があります。それも並べ替えたい場合は、スクリプトなどを含めることTask
ができます。awk
どのように動作しますか?
このsort
コマンドはさまざまな方法でデータをソートできます。この場合、列9の値に基づいてソートします。特に明記しない限り、標準の英数字ソートを使用します。
.... -k 9 ....
例の他のパラメータは、使用する入力ファイル(ログファイル)と結果を-o <out.log>
。