0

私はいくつかの回転ファイルを持っています.rotatitveは5つのファイルがあり、そのファイルは終日のログを保存します. そして、最初のファイルがいっぱいの場合、ログは 2 番目のファイルに保存され、2 番目のファイルがいっぱいの場合、ログは 3 番目のファイルに保存され、最後のファイルがいっぱいの場合、最初のファイルの内容が削除され、ログは最初のファイルに保存されます。たとえば、1 つのファイルは次のとおりです。

$cat log1
2013-06-09 08:00  Error1  08x000001  user2
2013-06-09 08:00  Error1  08x000001  user3
2013-06-09 08:01  Error2  08x000002 user4
2013-06-09 08:02  Error3  08x000003  user5     
              .
              . 
              .
2013-06-09 12:22  Error9  08x900009  user5
2013-06-09 12:22  Error8  08x011011  user1

問題は、ログを読み、ある範囲の grep を実行する必要があることです。

たとえば、2013 年 6 月 9 日の 08:00 から 11:00 までのログが必要です。

つまり、時間の行: 08:00、08:01、08:02、08:03、...、11:00 および日付 2013-06-09

また、grep を使用すると日付を確認できますが、時間範囲の行を抽出する方法がわかりません。

4

5 に答える 5

2

あなたの特定の問題について、ラウンド時間で:

grep '^2013-06-09 \(08*\|09*\|10*\|11:00\)'

すべきです。

于 2013-07-09T20:26:58.937 に答える
2

egrep を使用する必要があります。次に、それを grep に戻して日付を取得するか、1 つの egrep として実行することもできます

$ egrep "0[8-9]:" log
2013-06-09 08:00  Error1  user2
2013-06-09 08:00  Error1  user3
2013-06-09 08:01  Error2  user2
2013-06-09 08:02  Error3  user5
2013-06-09 09:03  Error3  user5

$ egrep "(0[8-9]|1[0-1]):" a
2013-06-09 08:00  Error1  user2
2013-06-09 08:00  Error1  user3
2013-06-09 08:01  Error2  user2
2013-06-09 08:02  Error3  user5
2013-06-09 09:03  Error3  user5
2013-06-09 10:02  Error3  user5
2013-06-09 10:02  Error3  user5
2013-06-09 11:02  Error3  user5
于 2013-07-09T20:28:09.287 に答える
1

あなたの日付形式がyyyy-mm-dd HH:MMの場合、私があなたを正しく理解していれば、比較的簡単です。

あなたは出来る:

awk '$1" "$2>="2013-06-09 08:00" && $1" "$2 <= "2013-06-09 11:00"' *.log

これ*.logは、5 つのログ ファイルすべてに一致します。log.*たとえば、ファイル名に応じて、異なるパターンになる可能性があります。

于 2013-07-09T20:27:22.647 に答える