split ファイルを一定の行数やサイズで分割する
split [オプション] [入力 [接頭辞]]試してみる
split -l 2 access.log work/part_2行ずつに分割します。名前は part_aa、part_ab のようになります。
ls workできたファイルを確認します。6行を2行ずつなので3つです。
cat work/part_ab2つ目のファイルの中身を確認します。
split -d -l 3 access.log work/half_-d で、接尾辞を aa ではなく数字(00、01)にします。
split -b 200 access.log work/chunk_ && ls work | wc -l-b でバイト数を指定して分割します。ファイルの数を数えて確認します。
cat work/part_a* | cmp - access.log && echo same分割したファイルをつなげると、元のファイルに戻ります。
主なオプション
-l 数 | 指定した行数ごとに分割する |
|---|---|
-b サイズ | 指定したバイト数ごとに分割する(K、M などの単位が使える) |
-d | 接尾辞を数字にする |
-a 数 | 接尾辞の長さを指定する(既定は2) |
-n 数 | 指定した数のファイルに分割する |
解説
基本
split は大きなファイルを小さなファイルに分けます。何も指定しないと、1000行ごとに分割します。元のファイルは変わりません。
出力ファイルの名前
出力ファイルは、接頭辞に接尾辞を付けた名前になります。接頭辞を省くと x が使われ、xaa、xab、…となります。接頭辞にディレクトリを含めれば、別の場所にファイルを作れます。何も考えずに実行すると、今いるディレクトリにファイルが散らばるので、気をつけます。
分割の単位
-l は行数、-b はバイト数で分けます。-b は、行の途中で切れることがあります。行の途中で切りたくないときは、-C を使うと、行を保ったまま、指定したサイズ以内に収まるよう分割できます。
元に戻す
分割したファイルは、cat で順に結合すれば元に戻ります。シェルのワイルドカードは名前順に展開されるので、cat 接頭辞* で並びが正しくなります。
使い道
メールで送れるサイズに分ける、ログを一定の大きさで区切る、といった場面で使います。