ログなどで日付や時刻、その範囲を抽出する際だとgrepやawkなどを使って頑張ることが多いのだが、なんか他いいコマンドないかなと調べていたところ、Perlで記述された『dategrep』というコマンドがあるようだ。 名前そのままに、日付でファイルやログをgrepできるツールのようだ。

以下のようにコマンドを実行してインストールする。 (cpanからもインストールできるが、うまく動作しなかった)

git clone https://github.com/mdom/dategrep
cd dategrep/
sudo sh -c 'perl Makefile.PL && make && make install'
sudo cpan Moo.pm Date::Manip::Delta Config::Tiny

インストールできたら、実際にログを抽出してみよう。 以下のようにコマンドを実行することで、指定した範囲の時刻を抽出可能なようだ。

dategrep --format "%b %d %H:%M:%S" --start "23:00" --end "23:10" /var/log/messages
[root@BS-PUB-CENT7-02 ~]# dategrep --format "%b %d %H:%M:%S" --start "23:00" --end "23:10" /var/log/messages
Jan 30 23:01:01 BS-PUB-CENT7-02 systemd: Started Session 2 of user root.
Jan 30 23:01:01 BS-PUB-CENT7-02 systemd: Starting Session 2 of user root.
Jan 30 23:08:23 BS-PUB-CENT7-02 systemd: Starting Cleanup of Temporary Directories...
Jan 30 23:08:23 BS-PUB-CENT7-02 systemd: Started Cleanup of Temporary Directories.

確かに、対象の時間帯のみを抽出することができた。 その他の実行例についてはこちらを参照するといいだろう。

テストでログの順番をバラバラにしてみたところ、一部行は抽出されなかったのでawkやsedによる処理と同様に指定された範囲を抽出しているようだ。 awkやsedに慣れてるようならばそちらを使ったほうがいいだろう。

日付のフォーマットを指定できるのは結構いいと思うので、CUIが不慣れな人はこれを使うのも有りかも。