splitコマンド : 複数ファイルに分割

Linuxコマンド(ファイル/ディレクトリ管理)
2023-09-29
ヒーローイメージ

目次
  1. コマンド概要
  2. コマンド書式
  3. コマンド使用例

コマンド概要

  • splitコマンドは指定したファイルもしくは標準入力されたテキストを複数ファイルに分割するコマンドです。

  • splitコマンドはデフォルトで1000行毎に1つのファイルをxを接頭語にしたファイル名で分割します。

コマンド書式

コマンド書式
split [オプション] [ファイル名 [接頭語] ]
オプション 説明

-a 桁数
--suffix-length=桁数

分割後ファイル名の接尾語の桁数を指定する(デフォルトは2)。

--additional-suffix=文字列
 

分割後ファイル名の末尾に追加する文字列を指定する。

-b 数値
--bytes=数値

指定したバイト数(=数値)を超えないようにファイルを分割する。

-C 数値
--line-bytes=数値

分割ファイルの1行あたりのバイト数(=数値)を指定する。

-d
--numeric-suffixes

分割後ファイル名の接尾語に数字が利用されます。

-l 行数
--lines=行数

指定した行数でファイルを分割する(デフォルトは1000行)。

--verbose
 

出力ファイル名などを出力する。

コマンド使用例

動作確認環境
項目 補足
OS Amazon Linux 2
シェル bash 4.2.46
コマンド split (GNU coreutils) 8.22
PS1 [\u@\h \W]$ プロンプト表示形式は [ユーザ名@ホスト名 カレントディレクトリ名]ユーザ権限
PS2 > 継続行のプロンプト表示形式

split : ファイル分割

  • splitコマンドを利用すると指定したファイルもしくは標準入力されたテキストを複数ファイルに分割することができます。

  • ファイル名に続けて分割後ファイル名の接頭語を指定することも可能です。

    コマンド例
    // テスト用ファイル作成
    [username@hostname ~]$ for i in `seq 1 10`
    > do
    >   ls -al /usr/bin >> tempfile1
    > done
    
    // ファイル行数確認(分割前)
    [username@hostname ~]$ wc -l tempfile1
    8530 tempfile
    
    // ファイル分割
    [username@hostname ~]$ split tempfile1
    
    // ファイル行数確認(分割後)
    // →ファイルが1000行毎に「x」を接頭語にしたファイル名で分割されている
    [username@hostname ~]$ wc -l x*
    1000 xaa
    1000 xab
    1000 xac
    1000 xad
    1000 xae
    1000 xaf
    1000 xag
    1000 xah
    530 xai
    8530 total
    
    // ファイル分割(接頭語指定)
    [username@hostname ~]$ split tempfile1 tempfile1-
    
    // ファイル行数確認(分割後)
    [username@hostname ~]$ wc -l tempfile1-*
    1000 tempfile1-aa
    1000 tempfile1-ab
    1000 tempfile1-ac
    1000 tempfile1-ad
    1000 tempfile1-ae
    1000 tempfile1-af
    1000 tempfile1-ag
    1000 tempfile1-ah
    530 tempfile1-ai
    8530 total
    
    

split -a : 接尾語の桁数指定

  • -aオプションを使用すると分割後ファイル名の接尾語の桁数を指定することができます(デフォルト桁数は2です)。

    コマンド例
    // テスト用ファイル作成
    [username@hostname ~]$ for i in `seq 1 10`
    > do
    >   ls -al /usr/bin >> tempfile1
    > done
    
    // ファイル分割(接尾語の桁数指定)
    [username@hostname ~]$ split -a 1 tempfile1 tempfile1-
    
    // 分割後ファイル名
    [username@hostname ~]$ wc -l tempfile1-*
    1000 tempfile1-a
    1000 tempfile1-b
    1000 tempfile1-c
    1000 tempfile1-d
    1000 tempfile1-e
    1000 tempfile1-f
    1000 tempfile1-g
    1000 tempfile1-h
    530 tempfile1-i
    8530 total
    
    

split -b : 分割バイト上限指定

  • -bオプションを使用すると指定したバイト数を超えないようにファイルを分割することができます。

    コマンド例
    // テスト用ファイル作成
    [username@hostname ~]$ for i in `seq 1 10`
    > do
    >   ls -al /usr/bin >> tempfile1
    > done
    
    // 分割前ファイルのバイト数
    [username@hostname ~]$ wc -c tempfile1
    506320 tempfile1
    
    // 分割後ファイルのバイト数上限を指定して分割実行
    [username@hostname ~]$ split -b 40000 tempfile1 tempfile1-
    
    // 分割後ファイルのバイト数
    [username@hostname ~]$ wc -c tempfile1-*
    40000 tempfile1-aa
    40000 tempfile1-ab
    40000 tempfile1-ac
    40000 tempfile1-ad
    40000 tempfile1-ae
    40000 tempfile1-af
    40000 tempfile1-ag
    40000 tempfile1-ah
    40000 tempfile1-ai
    40000 tempfile1-aj
    40000 tempfile1-ak
    40000 tempfile1-al
    26320 tempfile1-am
    506320 total
    
    

split -d : ファイル分割(数字連番)

  • -dオプションを使用すると分割後ファイル名の接尾語に数字が利用されるようになります。

    コマンド例
    // テスト用ファイル作成
    [username@hostname ~]$ for i in `seq 1 10`
    > do
    >   ls -al /usr/bin >> tempfile1
    > done
    
    // 分割前ファイルの行数
    [username@hostname ~]$ wc -l tempfile1
    8530 tempfile1
    
    // ファイル分割(接頭語=「tempfile-」 接尾語=数字)
    [username@hostname ~]$ split -d tempfile1 tempfile1-
    
    // 分割後ファイルの行数
    [username@hostname ~]$ wc -l tempfile1-*
    1000 tempfile1-00
    1000 tempfile1-01
    1000 tempfile1-02
    1000 tempfile1-03
    1000 tempfile1-04
    1000 tempfile1-05
    1000 tempfile1-06
    1000 tempfile1-07
    530 tempfile1-08
    8530 total
    
    

split -l : 分割行数指定

  • -lオプションを使用すると指定した行数でファイルを分割します。

    コマンド例
    // テスト用ファイル作成
    [username@hostname ~]$ for i in `seq 1 10`
    > do
    >   ls -al /usr/bin >> tempfile1
    > done
    
    // 分割前ファイルの行数
    [username@hostname ~]$ wc -l tempfile1
    8530 tempfile1
    
    // 分割ファイルの行数指定して分割実行
    [username@hostname ~]$ split -l 2000 tempfile1 tempfile1-
    
    // 分割後ファイルの行数
    [username@hostname ~]$ wc -l tempfile1-*
    2000 tempfile1-aa
    2000 tempfile1-ab
    2000 tempfile1-ac
    2000 tempfile1-ad
    530 tempfile1-ae
    8530 total
    
    

split --verbose : 実行詳細情報出力

  • --verboseオプションを使用すると出力ファイル名などを出力されます。

    コマンド例
    // テスト用ファイル作成
    [username@hostname ~]$ for i in `seq 1 10`
    > do
    >   ls -al /usr/bin >> tempfile1
    > done
    
    // 分割前ファイルの行数
    [username@hostname ~]$ wc -l tempfile1
    8530 tempfile1
    
    // ファイル分割実行(実行詳細情報表示)
    [username@hostname ~]$ split --verbose tempfile1 tempfile1-creating file ‘tempfile1-aa’
    creating file ‘tempfile1-ab’
    creating file ‘tempfile1-ac’
    creating file ‘tempfile1-ad’
    creating file ‘tempfile1-ae’
    creating file ‘tempfile1-af’
    creating file ‘tempfile1-ag’
    creating file ‘tempfile1-ah’
    creating file ‘tempfile1-ai’
    
    // 分割後ファイルの行数
    [username@hostname ~]$ wc -l tempfile1-*
    1000 tempfile1-aa
    1000 tempfile1-ab
    1000 tempfile1-ac
    1000 tempfile1-ad
    1000 tempfile1-ae
    1000 tempfile1-af
    1000 tempfile1-ag
    1000 tempfile1-ah
    530 tempfile1-ai
    8530 total
    
    

分割ファイル結合

  • 以下のようにcatコマンドを駆使すると分割したテキストファイルを復元(結合)することができます。

    コマンド例
    // テスト用ファイル作成
    [username@hostname ~]$ for i in `seq 1 10`
    > do
    >   ls -al /usr/bin >> tempfile1
    > done
    
    // ファイル分割
    [username@hostname ~]$ split -d tempfile1 tempfile1-
    
    
    // ファイル状態(分割後)
    [username@hostname ~]$ wc -l tempfile1*
    8530 tempfile1
    1000 tempfile1-00
    1000 tempfile1-01
    1000 tempfile1-02
    1000 tempfile1-03
    1000 tempfile1-04
    1000 tempfile1-05
    1000 tempfile1-06
    1000 tempfile1-07
        530 tempfile1-08
    17060 total
    
    // 分割後ファイルを1つのファイルに結合
    [username@hostname ~]$ cat tempfile1-* > tempfile2
    
    // 分割前ファイルと分割後結合ファイルに差分なし
    [username@hostname ~]$ diff tempfile1 tempfile2
    
    
    

コメント


Palette Codeなるべく丁寧にプログラミング関連技術を解説するサイト