Clojureでアクセスログの処理時間を集計
概要
最近Bashで集計をすることが多いです。集計作業楽しいです。 と同時に、Clojureという言語にも興味ができたので、せっかくなので 簡単な集計作業を両方の言語でやってみたというだけの話です。
目的
access_log というログファイルが存在します。 ログのデータはすべて行単位ですが、共通することは行の一番最後の数値は アクセス時の処理時間です。
このアクセスログの時間を集計して、合計秒と行数を出力したいです。
作成したコード
まとめ
集計作業のコード量の短さや読みやすさ、手軽さはやっぱり BashとAwkのほうが断然上だなぁ...と。 Awkとかはもろに集計のための言語なんでかなり便利。 Clojureに集計やらせるもんじゃないかな...。 でも大量の便利関数群をまだまだ把握できていないので、 それらを駆使したらもっと短くシンプルになるのかも?
個人的にはBashとClojureってなんか似ているような気がします。 BashのパイプとClojureの関数型言語の性質が似てて、 コードを書いていてパズルを解いているような感じがしてコーディングがすごく楽しい。 逆にGoだとClojureほどコーディングが楽しくなかったり... 実装自体は複雑な機能がないので、つまづくこともあまりなく高速で実装できますが 味気ない感じがどうもあります(気にするべきじゃないのかもですが)。
余談
集計作業を行うとき、今まではなんとなくPythonとかでやっていたのですが、 そこまで複雑ではない処理だったらむしろPythonよりもBashとAwkのほうが 短く素早く実装できるなぁと実感しています。
シェルのコードをPythonに置き換えるような話をちらほら聞く中 時代を逆走するようにBashとAwkの勉強を最近はしています。 でも使ってみるとかなり便利なので、これからも勉強しようと思います。