それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ファイルを一定サイズ分割するSplitコマンド,文字で分割するcsplitコマンド

巨大なログファイルを適当に分割して持ち運ぶとか.

split はファイルサイズで分割
csplit は特定文字で分割

200k でファイルを分割する

巨大なzip ファイルもばっさり切れます

split  -b 200000 foo.zip

これでfoo.zip(2GB)が200,000バイト(200k)単位に 分割される。


分割できても結合出来なくちゃ意味ないじゃん

cat で結合する

なんと、Catです。Catで結合です

cat * > foo.zip

簡単ですねー split はファイルの中身に関係なくバイトで切るのです.

csplit

csplit は、決まり文字を見つけたらファイルを分割する

csplit はファイルのバイト数の替わりに,文字列を見つけたら分割します。
cはchar(文字)の「c」だと思ってましたが,context の「c」のようです


巨大なログファイルを読むにはEmeditorしか無いと思ってたけど,適当に分割すれば何でも読める.

10年以上前の技術は偉大です.ログ整理にHadoopも要らない.ファイル分割してNFSで適当に処理していけばいけばあんなごっついのいらん。

2011-07-28追記

splitのバイト数指定はもっと柔軟

20MBに分割
split -b 20MB fooo.log
100kbに分割
split -b 100kb fooo.log

巨大なファイルは読込に時間が掛かって転送が遅かったりするので,複数ファイルに分割しちゃえば,軽く扱える。意外と重要なんですよ。

巨大すぎてファイル名が多い場合

出力ファイルの名前は PREFIX (デフォルトは `x') に `aa' や `ab' などの文字列集合を付加したものになる。 出力ファイルをファイル名でソートして結合すると 元のファ
イルになるように、付加する文字列が選ばれる。 (676 よりも多くの出力ファイルが必要になる場合は、 split は `zaa', `zab' などを用いる。) このグループの長さは
--suffix-length で変更できる。

676 より多くなる場合は --suffix-length らしい