sortコマンドで簡単にApacheのログを時系列に並び替え

ロードバランサを経由するのでApacheのログが複数のサーバに分散する
ログはWebalizerで解析するのですが
Incrementalモードだと時系列に並んでないとうまく解析できないみたい(Ver.2.01)
ファイルを集めるのはいいとして
ログを並び替えるのをどうするか

http://d.hatena.ne.jp/rougeref/20080909
http://www.kishiro.com/apache/analyze_log.html
LLを使えばなんとでもなるのですがそれも面倒なので
# DBも面倒です、量も多くないですし

sortコマンドでサクッとできないかと調べると
http://jehiah.cz/a/sorting-apache-logs
はなかなかよかったのですが
スペース1つを区切り文字にしているので
例えばユーザ名にスペースが入るとNGです

結論としては

% setenv LC_ALL C
% sort -t '[' -k 2.8,2.11n -k 2.4,2.6M -k 2.1,2.2n -k 2.13,2.14n -k 2.16,2.17n -k 2.19,2.20n access_log_all > access_log_sort

とするととりあえずよさそう
# まぁユーザ名に'['があるとこれもNGなんですが...

sortはLC_TIMEがCでないと月名(Jan,Feb...)でソートできない
LC_ALLをCにするのは
http://d.hatena.ne.jp/sile/20091102/1257175329
http://d.hatena.ne.jp/ny23/20120113/p1
を参考に
# bashなひとはexportで

あとメモgzipしたファイルとそうでないファイルを合わせるには

% zcat -f access_log access_log.1.gz ... > access_log_all

とするとよさそう


まったくそのとおり!