1

次の形式のログファイルからメッセージをフィルタリングする必要があります。

2013-03-22T11:43:21.817078+01:00  INFO    log msg 1...
...
2013-03-22T11:44:32.817114+01:00  WARNING log msg 2...
...
2013-03-22T11:45:45.817777+01:00  INFO    log msg 3...
...
2013-03-22T11:46:59.547325+01:00  INFO    log msg 4...
...

(ここ...で「より多くのメッセージ」を意味します)

フィルタリングは、時間枠に基づいて実行する必要があります。これはbashスクリプトの一部であり、コードのこの時点で、時間枠はととして保存され$start_timeます$end_time。例えば:

start_time = "2013-03-22T11:45:20"
end_time   = "2013-03-22T11:45:50"

またはの正確な値がログファイルに表示されない場合があることに注意してください。それでも、私が探しているものであるいくつかのメッセージが時間枠内にあります。$start_time$end_time may [$start_time, $end_time]

これで、フィルタリングを実行するためにPythonスクリプトが必要になるとほぼ確信していますが、実行速度がはるかに速い(ログファイルが大きい)ため、grep(またはawk、またはその他のツール)を使用したいと思います。

助言がありますか?

4

2 に答える 2

1

あなたの質問のログ内容に基づいて、私はawkワンライナーが役立つかもしれないと思います:

awk -F'.' -vs="$start_time" -ve="$end_time" '$1>s && $1<e' logfile

注:これは、開始時刻と終了時刻を除くコンテンツのフィルタリングです。

于 2013-03-26T13:10:36.553 に答える
0
$ start_time="2013-03-22T11:45:20"

$ end_time="2013-03-22T11:45:50"

$ awk -F'.' '$1>s&&$1<e' s=$start_time e=$end_time file
2013-03-22T11:45:45.817777+01:00  INFO    log msg 3...
于 2013-03-26T13:07:28.837 に答える