awk でログファイルを複数に分割する

こんにちは、河野です。

今日もログネタです。1週間毎に保存されたログを日ごとに分けたいなと思ったので、awkでやってみました。

ログファイルはこんな感じです。わかりやすくするため1日辺り1行のログにしてみました。

これを、yyyy-mm-dd.log として7日分にしたいと思います。

日付を取得する

まずは、日付部分を取得したいと思います。awkの動作は、awkスクリプトの実行ファイルにしてみます。

日付を変換する

ちゃんと日付が取得できました。フォーマットが異なるので変換してみます。とりあえず月の表示がアルファベットですが、そこはいったんそのままで。

このファイルだけに限れば、Novを11にするだけで解決するんですが、ちゃんと対応したいと思います。

ちゃんと変換できました!関数の仕組みは、連結した文字列からindexで位置を取得し、それを4で割っています。最初にアンダースコアを付けて、結果の数字が1~12になるよう調整しています。

ただ、もう少しだけ調整が必要で、1~9月までは1桁になってしまうので、2桁にする必要があります。sprintfを使います。

個別のファイルに保存する

さて、日付が取得できるようになりましたので、後はログを日付別のファイルに保存するだけです。awkでも、シェルと同じようにリダイレクトが使えるので、受け取った行を全部日付のファイルに流し込むだけでOKです。

ちゃんとログがリダイレクトされたため、今までと異なり何も出力されていません。ファイルに保存されているか確認してみます。

ちゃんと分かれて保存されました!

linuxで使えるコマンドをパイプとリダイレクトで繋ぐだけでは、異なるファイルに保存するのはちょっと大変です。かといって、PythonやRubyなどLLを使うほどでは…という時にはawkが使えると思います!

Comments are closed, but you can leave a trackback: Trackback URL.

Comments

  • n  On 2013年11月12日 at 17:21

    とても参考になりました。ありがとうございます。