▽1
●
a-kuma3 ●90ポイント ベストアンサー |
シェルスクリプトの中で Perl を使って、ログファイルの時刻を切り出して、一週間前の時刻と比較する。
例えば、こんな感じ。
#! /usr/bin/bash cat apli.log* | \ perl -e ' use Time::Local; my $now = time; my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($now); my $today = timelocal(0, 0, 0, $mday, $mon, $year); my $aweek_before = $today - 7*24*60*60; while (my $line = <STDIN>) { if ($line =~ m/^(\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+)/) { my $t = timelocal($6, $5, $4, $3, $2 - 1, $1 + 2000); if ($t >= $aweek_before) { print $line; } } } '
起動時刻の一週間前の午前0時よりも、ログの時刻が後だったら標準出力にログの内容を出力してます。
対象のログファイルは全ファイルとしていますが、ファイル数が多くて速度が気になるようだったら find の mtime で絞り込めば良いと思います。
find . -name "apli.log*" -mtime -8 -print | xargs cat | \ perl -e ' ... 以下、同じ
"-8" は、間違いじゃないです :-)
いや、だからgrepをふたつかませればいいでしょう。|で。項目1で日時、項目2で目当てのフレーズ。