きっかけ
ローテーションを設定していなかったアプリのログを、一部の期間に限って提出する必要が出てきました。
気がつくと、サイズは51MB, 5万行くらいになっています。
Apacheのログのように1行ごとに日付が入っていない、railsのproduction.logログだったので、指定期間の分だけどうやって抽出するのか悩みました…。
splitコマンドを使おう
連結にはcatを使うのは知っていましたが、分割用のコマンドは知りませんでした…。
分割の単位は、行数やバイト数が指定できるそうです。
また、分割されたファイル名には、アルファベットの連番の拡張子がくっつくそうです。
やってみたところ…
# ls -sh production.log
51M production.log
# split -l 1000 production.log production.log.
# ls
production.log production.log.ca production.log.eb production.log.gc production.log.id production.log.ke production.log.mf production.log.og
# … 以下略
たくさんできました。
疑ってかかっているので確かめる
できたファイルが本当に1000行単位なのか、確かめてみます。
# for FILE in `ls production.log.*`; do wc -l $FILE; done
1000 production.log.aa
1000 production.log.ab
1000 production.log.ac
# 途中略…
1000 production.log.vu
1000 production.log.vv
1000 production.log.vw
1000 production.log.vx
1000 production.log.vy
1000 production.log.vz
814 production.log.wa
大丈夫のようです。
肝心の、『x月x日から、x月x日まで』というあたりは、grepでStartを含むファイル、Endを含むファイルを見つけて、その間のファイルを提出という、あまり上手くない方法となりました…。
サーバ/インフラエンジニアの皆さんは、この辺りのテクニックは駆使していらっしゃることと思いますが、とりあえずsplitを覚えて、『どうしよう?』な少し心配事が減った次第です。