タイムスタンプに基づいてログファイルのセクションを切り取る高速スクリプト

タイムスタンプに基づいてログファイルのセクションを切り取る高速スクリプト

私は探しています高速スクリプト大きなmail.logを解析し、その部分を返します指定された2つのタイムスタンプの間すべてのメールサーバーでこれを実行し、関連するログ部分を中央の場所にコピーしてさらに分析できるようにしたいと考えています。

bash で何かを書きましたが、動作するものの遅いです。

誰か知っていますかすでに存在するものこれを実現するには、それとも Perl を学んで自分で何かを作る必要があるのでしょうか?

(私はまだSOにこれを投稿するつもりはありません。書く任意のコード - 他の誰かがすでに使用しているものを探しているだけです)

答え1

私はawkが大好きです:)

私のログの形式は次のとおりです:

Jul 14 12:49:10 xxxxxx sendmail[31337]: ...........

私は使うだろう:

awk '$3 >= "12:00:00" && $3 <= "13:00:00" {print;}' < /var/log/maillog

たとえば、ログを日ごとに分割しない場合など、必要に応じてこれを調整できる可能性があります。

ボーナス:

たまたま手元にあった Apache 形式:

xxx.xxx.xxx.xxx - - [01/Jul/2009:03:06:24 -0400] "GET /favicon.ico HTTP/1.1" 200 3638
awk '$4 >= "[01/Jul/2009:03:00:00" && $4 <= "[01/Jul/2009:04:00:00" {print;}' < access_log

答え2

特定の日付範囲を印刷するには > 出力ファイル

(上記の回答にコメントとして入れることはできません。そうしないと、そうなってしまいます)

HTH

awk '$2 >= "21" && $3 >= "09:00:00" && $2 >= "21" && $3 <= "11:00:10" {print > "m_range.log";}' < /var/log/m.log

cat m_range.log 
...
Nov 21 09:00:17 mail postfix/qmgr[1694]: 1C50D276524A: from=<[email protected]>, size=2378, nrcpt=1 (queue active)
...

関連情報