split - ファイルを分割する

split

splitコマンドはファイルを分割するコマンドになります。

分割したファイルはcatコマンド等で結合することができます。また、--filterオプションを用いれば、分割後のファイルにさらにコマンドを実行することができます。

スポンサーリンク

splitコマンドの利用例

ファイルを分割
(オプション無し)

splitコマンドは分割するファイルと、分割後のファイル名(デフォルトでは'x')を指定します。splitコマンドはデフォルトでは1000行毎にファイルを分割し、指定した分割後のファイル名に接尾辞として'aa','ab','ac',...のような文字を順番に追加してファイルを分割していきます。この文字は結合しやすいソートできる順番で追加され、この文字が使い果たされるとき、'aa',...,'yz','zaaa','zaab',...のように接尾辞の幅を2つ増やしていき、やはりソートできる順番になるようにファイルが分割されていきます。

コマンド例

numbers.txt

実行結果

numbers.txtは1から3000までの数字が記述されたファイルになり、seqコマンドで作成されています。
コマンド例
分割後のファイルはcatコマンドで結合できます。また、ファイルが結合されたかどうかはmd5sumコマンドやsha256sumコマンド等のメッセージダイジェストを作成するコマンドで確認できます。
コマンド例と実行結果

例えば、ネットワークを通じて分割されたファイルをダウンロードして手に入れた場合などは、元のファイルが手元に存在していません。
そのような場合にメッセージダイジェストと分割されたファイルで、ファイルの同一性を確かめます。その時、メッセージダイジェストを確かめるコマンドのオプションとして、-cオプションが便利になります。
コマンド例と実行結果

digests

また、ファイルの内容が異なる場合は、エラーメッセージが表示されます。
コマンド例と実行結果
catコマンドは、主にファイルを表示するコマンドとして使われます。 他にも、ファイルを連結させて表示をすることができま...
md5sumコマンドはmd5というアルゴリズムによって、128ビットのメッセージダイジェスト(ハッシュ値)を計算するコマンド...

行数を指定してファイルを分割
(-lオプション)

-lオプションは行数を指定してファイルを分割できます。

コマンド例

numbers.txt

実行結果

セパレータを指定
(-tオプション)

-tオプションを用いると-lオプション等の行でファイルを分割するオプションの時に、改行(LF)ではなく、別の文字を使用してファイルを分割できます。

また、catで表示しているファイルでの最後の$の文字は、プロンプトの文字列です。

sepfile

コマンド例と実行結果

サイズを指定してファイルを分割
(-bオプション)

-bオプションはサイズを指定してファイルを分割できます。ファイルの大きさが多い場合、分割するのに時間がかかるかもしれません。

コマンド例と実行結果

ファイルサイズを指定できる接尾辞

記号サイズ(bytes)
b512
KB1000
K1024
MB1000*1000
M1024*1024
GB1000*1000*1000
G1024*1024*1024

duコマンドは、ファイルやディレクトリのサイズを確認することができます。 ディスク容量をあける場合に大きいファイルサイ...

1行のサイズを指定して分割
(-Cオプション)

-Cオプションはバイト数を指定してファイルを1行ごとに分割します。その1行は指定したバイト数を超えないようにそれぞれのファイルに分割します。また、指定したバイト数を超えた場合は別のファイルに分割されます。

コマンド例

file.txt

実行結果

また、ファイルの分割結果は以下のようになります。また、splitfile.aaの最後の$は、ファイルの最後に改行文字がないため、catコマンドが終了した後にプロンプトの文字列が表示されています。

ファイルの分割結果例

分割したファイルにコマンドを実行
(--filterオプション)

--filterオプションは分割したファイルを出力するのではなく、パイプを通して指定したコマンドを実行できます。また、分割後のファイル名は$FILEで取得できます。

このコマンドは分割したそれぞれのファイルの圧縮等に利用できます。

コマンド例と実行結果

分割したgzファイルの結合にはgzipコマンドやzcatコマンド等が利用できます。
コマンド例

-dオプション:解凍、-cオプション:標準出力に出力
または

入力ファイルを指定した数に分割
(-nオプション)

-nオプションは、入力ファイルを指定した数のファイル数に分割します。分割するファイルのサイズはサイズをファイル数で割ったものになり、余りになる部分はすべて分割する最後のファイルに割り当てられます。また、ファイルが小さい場合は、分割するファイルが空ファイルになる場合もあります。

また、-nオプションを指定するにはいくつかの形式があります。

-nオプションの形式

形式
nnで分割
k/nnで分割したk番目のファイルを標準出力
l/n行を分割せずにnで分割
l/k/n行を分割せずにnで分割したk番目のファイルを標準出力
r/n行をn分割したファイルに順番に割り当てて均等に分割
r/k/n行をn分割したファイルに順番に割り当て
均等に分割したファイルのk番目のファイルを標準出力

また、n,kは整数で、l,rはそのままの文字「l」と「r」を表しています。

nの形式(n個のファイルで分割する場合)は、以下のようになります。

コマンド例

実行結果

k/nの形式(n個のファイルで分割したときにk番目のファイル部分を標準出力する場合)は以下のようになります。

コマンド例

実行結果

lモード

l/nの形式(行を分割せずにn個のファイルに分割する場合)は以下のようになります。

コマンド例

実行結果

l/k/nの形式(行を分割せずにn個のファイルに分割したときにk番目のファイル部分を標準出力する場合)は以下のようになります。

コマンド例

実行結果

rモード

r/nの形式(n個の分割ファイルに順番に行を割り当て均等に分割する場合)は以下のようになります。また、rモードの分割では、パイプを利用できます。

コマンド例

実行結果

r/k/nの形式(n個の分割ファイルに順番に行を割り当て均等に分割したときに、k番目のファイル部分を標準出力する場合)は以下のようになります。

コマンド例

実行結果

空のファイルは作成しない
(-eオプション)

-eオプションは、-nオプションで空ファイルが作成される場合、空ファイルを作成しないオプションになります。

コマンド例と実行結果

接尾辞の文字数を変更
(-aオプション)

-aオプションは、分割するファイルのファイル名に付けられる接尾辞の文字数を指定することができます。

コマンド例

実行結果

また、-aオプションで指定した接尾辞の文字数を使い果たした場合は、エラーメッセージを出力して、分割を中断します。

コマンド例と実行結果

接尾辞を数字に
(-dまたは--numeric-suffixesオプション)

-dオプションは、分割ファイルのファイル名に追加される文字列を数字に変更することができます。また、数字が使い果たされると桁数は自動で2つ増やされていきます。

コマンド例と実行結果

-dオプションのロングオプションである--numeric-suffixesオプションを用いると開始する数字を指定できます。ただし、接尾辞の自動拡張機能をオフになります。
また、桁数は-aオプションで指定することができます。

コマンド例と実行結果

接尾辞を16進数に
(-xオプション)

-xオプションは、分割ファイルのファイル名に追加される文字列を数字に変更することができます。

また、--numeric-suffixesと同様に-xオプションのロングオプションである--hex-suffixesで開始する数字を指定することができます。

コマンド例と実行結果

接尾辞を追加
(--additional-suffixオプション)

--additional-suffixオプションは分割したファイルに、接尾辞を追加することができます。

コマンド例

実行結果

出力ファイル名を表示
(--verbose)

--verboseオプションは作成した分割ファイルの情報を表示することができます。

コマンド例と実行結果

参考

GNU Coreutils: split invocation

スポンサーリンク