web-dev-qa-db-ja.com

時間範囲をgrepするUnixコマンド

特定の日付で保存されたログファイルがあります。特定の日時の範囲のログエントリを別のファイルにフェッチしたい。

例:2014-12-04 00:00:00時間から2014-12-04 17:00:00までのすべてのエントリ

2
gaurav

Egrepを試してください:

pttrn="2014-12-04 0[0-9]"
pttrn="${pttrn}|2014-12-04 1[0-6]"
pttrn="${pttrn}|2014-12-04 17:00:00"

egrep "${pttrn}" <logfile>

Egrepパターンには3つの部分があります。最初の部分は00:00:00から09:59:59まですべてを取得します。 2番目の部分は10:00:00から16:59:59まですべてを取得し、3番目の部分は17:00:00を取得します。

2
Daniel Goldfarb

上記の日付範囲の変更に加えて、同じコマンドラインで目的の文字列を検索できます。

例:

grep "Nov 30 18:" /var/log/maillog | grep "Remote_" | wc -l

|を追加して検索ループを増やすか、結果をファイルに保存してみてください。

grep "1[3-7]/Sep/2011" /var/log/maillog > /var/krishna.txt
grep "1[3-7]/Sep/2011" /var/log/maillog > /tmp/results.txt

*wc -lは、コードの前の部分から生成されたリストの合計をカウントします。

0
Mike

4分間隔のログが必要な場合は、

grep "01/APR/2014:16:3[5-9]" logfile

2014年4月1日の16:35から16:39までのすべてのログ行を返します。

2014年9月17日から始まる過去5日間が必要であるとすると、次のものを使用できます。

grep "1[3-7]/Sep/2011" logfile

これが役に立てば幸い

0
vembutech

開始行と終了行を選択できます。 sed

sed -n '/Dec  5 11:00/,/Dec  5 12:00/p' /var/log/daemon.log

これにより、Dec 5 11:00の最初の行からDec 5 12:00の最初の行まで(およびそれを含む)すべての行が出力されます。これは、ログが時系列である(つまり、すべての行が時間順になっている)ことを前提としています。 -nは、各行を印刷するデフォルトのアクションを抑制するためのものです。

0
wurtel