Saba note

醜悪コード Ugly hacks ITものづくり

巨大なファイルを分割する

思わず溜めすぎてしまったログがgzで80MB近い容量になっていて展開したら2GBあった。のだけど、このファイルをいろいろ加工しないといけなくて、いろいろ触る度にコマンドラインでさえ5分ぐらい返ってこないということになってしまったので、その時の作業のメモです。

# split -l 10000 sample.log

とやったら、676ファイルに分割されてさらに出力できないというエラーが出た。いったい何行あるんだということで、仕方なく1GBで分割してみた。

# split -b 1000m sample.log
-rw-r--r-- 1 root root 1048576000 Oct 31 18:59 xaa
-rw-r--r-- 1 root root 1048576000 Oct 31 18:59 xab
-rw-r--r-- 1 root root 30744738 Oct 31 18:59 xac

3つのファイルに分割できたのでちょっと作業しやすいかも。と思いつつも、viで開いたらこのざま。
ログの中から文字列検索するのに、3分弱。CPU99%ってすごいですね。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32116 root 25 0 1143m 1.1g 1208 R 99.7 54.9 2:49.56 vi
3618645行でヒットしたので、ここでファイルを分割する。のだけど良い分割の方法を知らないので、viでやる。

:3618645,4131135 w! splited_file

で勝負しました。
しかしこんなでかいテキストファイル扱うのはじめてですね。普通データベースとかですもんね。3618645行目から最後の行までを別名で保存というところです。
3GBとかいうようなファイルをWindowsやiMacのテキストエディタで編集するのは殆ど不可能でした。私のiMacも4GBのメモリを積んでいたにも関わらずJeditの不連続モードじゃないと開けなかったし、Windowsのメモ帳やSakuraエディタ、Terapad全部ダメでした。viじゃないとお話にならない感じです。
viでもファイルオープンするだけで数分、検索で数分という状態だったのでギリギリです。是非ファイルはきちんと編集できる単位で分割しておきたいものです。
viでは、容量単位での分割、行単位での分割などファイル分割に関していろんなコマンドがあるので、いろいろできます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です