先週のシステムログを分析するスクリプトを作成したいと思います。
しかし、私のsyslogは「5月22日」のような愚かな日付形式で記録されます。 2013-05-22として記録されている場合、これは簡単です。
awk / bash / perl / sedを使用して2つの日付/時刻の間のすべての行ログを簡単に「grep」する方法はありますか?
ベストアンサー1
これは私にとってはあまりにも複雑ですが、あなたにとっては面白いかもしれません。
perl -p -e '
BEGIN{
@months=qw(jan feb mar apr may jun jul aug sep oct nov dec);
$month_number{$_}=++$i for @months;
$months_regex= join "|",@months;
}
s/^\s*($months_regex)[a-z]*\s+/$month_number{lc $1}-/i'
/var/log/syslog
これにより、簡単に解析できるように見えるMM-DD形式(ゼロパディングなしの月番号)の日付を含むログ行が標準出力として印刷されます。大文字と小文字に関係なく、完全な形式で提供された月名と3文字形式で提供された月名を処理します。
編集する
月番号をゼロで埋めるには、次のよう++$i
に置き換えます。sprintf "%02d",++$i
編集2 2つのエラーを修正しました。ありがとうございます。l0b0さんのコメントは次のとおりです。
- 月のリストに「5月」を追加してください。
- ゼロパディングレシピを次に変更します。
sprintf "%02d", ++$i