2017-06-13 6 views
0

は私が私がこのフィルターは、特定のカテゴリ

2017-06-13 11:47:05.121 [INFO] : Finished obj.clickButton('A1'); 
2017-06-13 11:47:05.137 [INFO] : Processing index 2432 
2017-06-13 11:47:13.807 [INFO] : start=1497347223552 end=1497347233576 
2017-06-13 11:47:13.827 [INFO] : start=1497347223552 end=1497347233576 
2017-06-13 11:47:13.882 [INFO] : start=1497347223552 end=1497347233576 
2017-06-13 11:47:14.695 [ERROR]: Caught exception waiting 
STACK:org.openqa.selenium.WebDriverException: window.obj is undefined 
Command duration or timeout: 367 milliseconds 
2017-06-13 11:47:14.863 [INFO] : start=1497347234059 end=1497347234690 
2017-06-13 11:47:15.192 [INFO] : start=1497347234059 end=1497347234690 
2017-06-13 11:47:05.137 [INFO] : Processing index 2433 
2017-06-13 11:47:15.192 [INFO] : start=1497347234059 end=1497347234690 

のようなログファイルを減らすためにをsedを使用することができる方法を理解する助けてくださいSED ...レコードの2つだけのカテゴリが含まれているファイルに使用:

レコードの

除数:

(^\d\d\d\d.\d\d.\d\d \d\d:\d\d:\d\d.\d\d\d) 

カテゴリー1:(複数行の正規表現):

Caught exception.*timeout: (\d+) milliseconds 
  • 出力\1 ms(偶数タイムスタンプが

カテゴリ2である

Processing index 
  • 出力として必要ない)

期待される結果処理した後:

2017-06-13 11:47:05.137 [INFO] : Processing index 2432 
367 ms 
2017-06-13 11:47:05.137 [INFO] : Processing index 2433 

を私は現在、唯一の基本的な使い方(s/search/replace/opt)をsedは、マニュアルを読んでもかかわらず、私は上記の効果とコマンドセット構成する方法がわからない知っています。

答えて

1

これらの基本的なsedコマンドは、sedを正しく使用するために必要なものです。他にはawkを使うべきです。

これはあなたの要件を明確にするためにあなたの質問を編集し、その後必要なすべてではない場合:

$ awk '/index/{print} /duration/{print $(NF-1), $NF}' file 
2017-06-13 11:47:05.137 [INFO] : Processing index 2432 
367 milliseconds 
2017-06-13 11:47:05.137 [INFO] : Processing index 2433 

代わりに「ミリ秒」の「ミリ秒」を印刷するためのいくつかの方法:

$ awk '/index/{print} /duration/{print $(NF-1), "ms"}' file 
2017-06-13 11:47:05.137 [INFO] : Processing index 2432 
367 ms 
2017-06-13 11:47:05.137 [INFO] : Processing index 2433 

$ awk '/index/{print} /duration/{print $(NF-1), substr($NF,1,1) substr($NF,length($NF)-6,1)}' file 
2017-06-13 11:47:05.137 [INFO] : Processing index 2432 
367 ms 
2017-06-13 11:47:05.137 [INFO] : Processing index 2433 

$ awk 'BEGIN{abbr["milliseconds"]="ms"} /index/{print} /duration/{print $(NF-1), abbr[$NF]}' file 
2017-06-13 11:47:05.137 [INFO] : Processing index 2432 
367 ms 
2017-06-13 11:47:05.137 [INFO] : Processing index 2433 

あなたにとってどれが正しいかは、入力内容に依存します。

+0

こんにちはエド、ありがとう。この場合、awkをどの程度効果的に使うことができるのか分かります。最後に、私はsedを使ってこの問題を解決しました。なぜなら、 'h'コマンドを使ってコンテキストを保持することが有益だからです。 (上の例では示されていません)私はあなたのawkの解決策をもう1つの質問で受け入れます:この例で 'milliseconds'を' ms'に変更することも同様に簡単ですか?私は単に '$ NF'を' 'ms ''?に置き換えるべきですか? – miroxlav

+0

いいえ、 'h'やs、g、p以外のsed構造体を(決して-nと一緒に)使用しないでください。そうでないと、文字通りawkが1970年代半ばに廃止された構造体を使用しています。発明された。同等のawkソリューションは、より明確で、より効率的で、移植性が高く、保守性が向上し、他の意味のある方法で優れているため、ソフトウェアを真剣に書くのではなく、メンタルエクササイズのために今日他の構造を厳密に使用しています。はい、ミリ秒の代わりにmsを書くのは簡単ですが、入力にナノ秒、秒、分などが気になる唯一の単位ですか? –

+0

「ミリ秒」を「ms」に変換する方法をいくつか追加しました。他のアプローチもありますが、それらのうちの1つが、私が思っているものである可能性が高い3です。 –

関連する問題