splitコマンドはファイルを分割するコマンドになります。
分割したファイルはcatコマンド等で結合することができます。また、--filterオプションを用いれば、分割後のファイルにさらにコマンドを実行することができます。
目次
- 1 splitコマンドの利用例
- 1.1 ファイルを分割 (オプション無し)
- 1.2 行数を指定してファイルを分割 (-lオプション)
- 1.3 セパレータを指定 (-tオプション)
- 1.4 サイズを指定してファイルを分割 (-bオプション)
- 1.5 1行のサイズを指定して分割 (-Cオプション)
- 1.6 分割したファイルにコマンドを実行 (--filterオプション)
- 1.7 入力ファイルを指定した数に分割 (-nオプション)
- 1.8 空のファイルは作成しない (-eオプション)
- 1.9 接尾辞の文字数を変更 (-aオプション)
- 1.10 接尾辞を数字に (-dまたは--numeric-suffixesオプション)
- 1.11 接尾辞を16進数に (-xオプション)
- 1.12 接尾辞を追加 (--additional-suffixオプション)
- 1.13 出力ファイル名を表示 (--verbose)
- 2 参考
splitコマンドの利用例
ファイルを分割
(オプション無し)
splitコマンドは分割するファイルと、分割後のファイル名(デフォルトでは'x')を指定します。splitコマンドはデフォルトでは1000行毎にファイルを分割し、指定した分割後のファイル名に接尾辞として'aa','ab','ac',...のような文字を順番に追加してファイルを分割していきます。この文字は結合しやすいソートできる順番で追加され、この文字が使い果たされるとき、'aa',...,'yz','zaaa','zaab',...のように接尾辞の幅を2つ増やしていき、やはりソートできる順番になるようにファイルが分割されていきます。
コマンド例
1 |
split numbers.txt splitfile.txt. |
numbers.txt
1 2 3 4 5 6 7 |
1 2 3 (省略) 2998 2999 3000 |
実行結果
1 2 |
$ls numbers.txt splitfile.txt.aa splitfile.txt.ab splitfile.txt.ac |
コマンド例
1 |
seq 3000 > numbers.txt |
コマンド例と実行結果
1 2 3 4 |
$cat splitfile.txt.* > mergefile.txt $md5sum numbers.txt mergefile.txt ee9762749fc5338b6c9b0948d14219c7 numbers.txt ee9762749fc5338b6c9b0948d14219c7 mergefile.txt |
例えば、ネットワークを通じて分割されたファイルをダウンロードして手に入れた場合などは、元のファイルが手元に存在していません。
そのような場合にメッセージダイジェストと分割されたファイルで、ファイルの同一性を確かめます。その時、メッセージダイジェストを確かめるコマンドのオプションとして、-cオプションが便利になります。
コマンド例と実行結果
1 2 3 4 5 6 7 8 |
$md5sum numbers.txt > digests $rm numbers.txt $ls digests splitfile.txt.aa splitfile.txt.ab splitfile.txt.ac $ $cat splitfile.txt.* > numbers.txt $md5sum -c digests numbers.txt: 完了 |
digests
1 |
ee9762749fc5338b6c9b0948d14219c7 numbers.txt |
また、ファイルの内容が異なる場合は、エラーメッセージが表示されます。
コマンド例と実行結果
1 2 3 4 |
$echo test >> numbers.txt $md5sum -c digests numbers.txt: 失敗 md5sum: 警告: 1 個の計算したチェックサムが一致しませんでした |
行数を指定してファイルを分割
(-lオプション)
-lオプションは行数を指定してファイルを分割できます。
コマンド例
1 |
split -l 500 numbers.txt splitfile.txt. |
numbers.txt
1 2 3 4 5 6 7 |
1 2 3 (省略) 2998 2999 3000 |
実行結果
1 2 3 |
$ls splitfile.txt.* splitfile.txt.aa splitfile.txt.ac splitfile.txt.ae splitfile.txt.ab splitfile.txt.ad splitfile.txt.af |
セパレータを指定
(-tオプション)
-tオプションを用いると-lオプション等の行でファイルを分割するオプションの時に、改行(LF)ではなく、別の文字を使用してファイルを分割できます。
また、catで表示しているファイルでの最後の$の文字は、プロンプトの文字列です。
sepfile
1 |
abababab |
コマンド例と実行結果
1 2 3 4 5 6 7 |
$split -l 1 -t 'b' sepfile splitfile. $ls sepfile splitfile.aa splitfile.ab splitfile.ac splitfile.ad splitfile.ae $cat splitfile.aa ab$ $cat splitfile.ab ab$ |
サイズを指定してファイルを分割
(-bオプション)
-bオプションはサイズを指定してファイルを分割できます。ファイルの大きさが多い場合、分割するのに時間がかかるかもしれません。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 |
$du -h bigfile 1.1G bigfile $ $split -b 200M bigfile splitfile. $du -h * 1.1G bigfile 200M splitfile.aa 200M splitfile.ab 200M splitfile.ac 200M splitfile.ad 200M splitfile.ae 24M splitfile.af |
ファイルサイズを指定できる接尾辞
記号 | サイズ(bytes) |
b | 512 |
KB | 1000 |
K | 1024 |
MB | 1000*1000 |
M | 1024*1024 |
GB | 1000*1000*1000 |
G | 1024*1024*1024 |
1行のサイズを指定して分割
(-Cオプション)
-Cオプションはバイト数を指定してファイルを1行ごとに分割します。その1行は指定したバイト数を超えないようにそれぞれのファイルに分割します。また、指定したバイト数を超えた場合は別のファイルに分割されます。
コマンド例
1 |
split -C 3 file.txt splitfile. |
file.txt
1 2 3 |
test1 test2 test3 |
実行結果
1 2 3 |
$ls splitfile.* splitfile.aa splitfile.ac splitfile.ae splitfile.ab splitfile.ad splitfile.af |
また、ファイルの分割結果は以下のようになります。また、splitfile.aaの最後の$は、ファイルの最後に改行文字がないため、catコマンドが終了した後にプロンプトの文字列が表示されています。
ファイルの分割結果例
1 2 3 4 |
$cat splitfile.aa tes$ $cat splitfile.ab t1 |
分割したファイルにコマンドを実行
(--filterオプション)
--filterオプションは分割したファイルを出力するのではなく、パイプを通して指定したコマンドを実行できます。また、分割後のファイル名は$FILEで取得できます。
このコマンドは分割したそれぞれのファイルの圧縮等に利用できます。
コマンド例と実行結果
1 2 3 4 5 6 7 |
$du -h bigfile 1.3G bigfile $ $split -b200M --filter='gzip > $FILE.gz' bigfile splitfile. $ls bigfile splitfile.ab.gz splitfile.ad.gz splitfile.af.gz splitfile.aa.gz splitfile.ac.gz splitfile.ae.gz splitfile.ag.gz |
コマンド例
1 |
gzip -dc splitfile.* > mergefile |
-dオプション:解凍、-cオプション:標準出力に出力
または
1 |
zcat splitfile.* > mergefile |
入力ファイルを指定した数に分割
(-nオプション)
-nオプションは、入力ファイルを指定した数のファイル数に分割します。分割するファイルのサイズはサイズをファイル数で割ったものになり、余りになる部分はすべて分割する最後のファイルに割り当てられます。また、ファイルが小さい場合は、分割するファイルが空ファイルになる場合もあります。
また、-nオプションを指定するにはいくつかの形式があります。
-nオプションの形式
形式 | |
n | nで分割 |
k/n | nで分割した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個のファイルで分割する場合)は、以下のようになります。
コマンド例
1 |
split -n 2 testfile splitfile. |
実行結果
1 2 3 4 5 |
$ls -l 合計 12 -rw-rw-r-- 1 ubuntu ubuntu 19 12月 25 09:32 splitfile.aa -rw-rw-r-- 1 ubuntu ubuntu 20 12月 25 09:32 splitfile.ab -rw-rw-r-- 1 ubuntu ubuntu 39 12月 25 09:26 testfile |
k/nの形式(n個のファイルで分割したときにk番目のファイル部分を標準出力する場合)は以下のようになります。
コマンド例
1 |
split -n 2/2 testfile |
実行結果
1 2 3 |
est04 test05 test06 |
lモード
l/nの形式(行を分割せずにn個のファイルに分割する場合)は以下のようになります。
コマンド例
1 |
split -n l/2 testfile linesplitfile. |
実行結果
1 2 3 4 5 |
$ls -l 合計 12 -rw-rw-r-- 1 ubuntu ubuntu 25 12月 25 09:41 linesplitfile.aa -rw-rw-r-- 1 ubuntu ubuntu 14 12月 25 09:41 linesplitfile.ab -rw-rw-r-- 1 ubuntu ubuntu 39 12月 25 09:26 testfile |
l/k/nの形式(行を分割せずにn個のファイルに分割したときにk番目のファイル部分を標準出力する場合)は以下のようになります。
コマンド例
1 |
split -n l/2/2 testfile |
実行結果
1 2 |
test05 test06 |
rモード
r/nの形式(n個の分割ファイルに順番に行を割り当て均等に分割する場合)は以下のようになります。また、rモードの分割では、パイプを利用できます。
コマンド例
1 |
cat testfile | split -n r/2 - splitfile. |
実行結果
1 2 3 4 5 |
$ls -l 合計 12 -rw-rw-r-- 1 ubuntu ubuntu 19 12月 25 09:46 splitfile.aa -rw-rw-r-- 1 ubuntu ubuntu 20 12月 25 09:46 splitfile.ab -rw-rw-r-- 1 ubuntu ubuntu 39 12月 25 09:26 testfile |
r/k/nの形式(n個の分割ファイルに順番に行を割り当て均等に分割したときに、k番目のファイル部分を標準出力する場合)は以下のようになります。
コマンド例
1 |
cat testfile | split -n r/2/2 - splitfile. |
実行結果
1 2 3 |
test2 test04 test06 |
空のファイルは作成しない
(-eオプション)
-eオプションは、-nオプションで空ファイルが作成される場合、空ファイルを作成しないオプションになります。
コマンド例と実行結果
1 2 3 |
$split -n 10 -e shortfile splitfile. $ls shortfile splitfile.aa splitfile.ab splitfile.ac splitfile.ad |
接尾辞の文字数を変更
(-aオプション)
-aオプションは、分割するファイルのファイル名に付けられる接尾辞の文字数を指定することができます。
コマンド例
1 |
split -a 4 -l 2 testfile splitfile. |
実行結果
1 2 |
$ls splitfile.aaaa splitfile.aaab splitfile.aaac testfile |
また、-aオプションで指定した接尾辞の文字数を使い果たした場合は、エラーメッセージを出力して、分割を中断します。
コマンド例と実行結果
1 2 |
$split -a 3 bigfile splitfile. split: 出力ファイルの接尾辞を使い果たしました |
接尾辞を数字に
(-dまたは--numeric-suffixesオプション)
-dオプションは、分割ファイルのファイル名に追加される文字列を数字に変更することができます。また、数字が使い果たされると桁数は自動で2つ増やされていきます。
コマンド例と実行結果
1 2 3 4 |
$split -d -l 1 testfile splitfile. $ls splitfile.00 splitfile.02 splitfile.04 testfile splitfile.01 splitfile.03 splitfile.05 |
-dオプションのロングオプションである--numeric-suffixesオプションを用いると開始する数字を指定できます。ただし、接尾辞の自動拡張機能をオフになります。
また、桁数は-aオプションで指定することができます。
コマンド例と実行結果
1 2 3 4 |
$split --numeric-suffixes=5 -a 3 -l 1 testfile splitfile. $ls splitfile.005 splitfile.007 splitfile.009 testfile splitfile.006 splitfile.008 splitfile.010 |
接尾辞を16進数に
(-xオプション)
-xオプションは、分割ファイルのファイル名に追加される文字列を数字に変更することができます。
また、--numeric-suffixesと同様に-xオプションのロングオプションである--hex-suffixesで開始する数字を指定することができます。
コマンド例と実行結果
1 2 3 4 5 6 7 |
$split -x -n 20 file splitfile. $ls file splitfile.04 splitfile.09 splitfile.0e splitfile.13 splitfile.00 splitfile.05 splitfile.0a splitfile.0f splitfile.01 splitfile.06 splitfile.0b splitfile.10 splitfile.02 splitfile.07 splitfile.0c splitfile.11 splitfile.03 splitfile.08 splitfile.0d splitfile.12 |
接尾辞を追加
(--additional-suffixオプション)
--additional-suffixオプションは分割したファイルに、接尾辞を追加することができます。
コマンド例
1 |
split --additional-suffix=.part -n 3 file splitfile. |
実行結果
1 2 |
$ls file splitfile.aa.part splitfile.ab.part splitfile.ac.part |
出力ファイル名を表示
(--verbose)
--verboseオプションは作成した分割ファイルの情報を表示することができます。
コマンド例と実行結果
1 2 3 4 |
$split --verbose -n 3 file splitfile. ファイル 'splitfile.aa' を作成しています ファイル 'splitfile.ab' を作成しています ファイル 'splitfile.ac' を作成しています |