Linux の分割および結合コマンドは、大きなファイルを操作する場合に非常に役立ちます。この記事では、Linux の分割および結合コマンドの使用方法を説明的な例とともに説明します。
結合および分割コマンド構文:
<ブロック引用>
結合 [オプション]… ファイル 1 ファイル 2
分割 [オプション]… [入力 [プレフィックス]]
Linux 分割コマンドの例
1.基本的な分割の例
以下は分割コマンドの基本的な例です。
$ split split.zip $ ls split.zip xab xad xaf xah xaj xal xan xap xar xat xav xax xaz xbb xbd xbf xbh xbj xbl xbn xaa xac xae xag xai xak xam xao xaq xas xau xaw xay xba xbc xbe xbg xbi xbk xbm xbo
したがって、ファイル split.zip は、ファイル名が x** の小さなファイルに分割されていることがわかります。 ** は、デフォルトで追加される 2 文字のサフィックスです。また、デフォルトでは、各 x** ファイルには 1000 行が含まれます。
$ wc -l * 40947 split.zip 1000 xaa 1000 xab 1000 xac 1000 xad 1000 xae 1000 xaf 1000 xag 1000 xah 1000 xai ... ... ...
したがって、上記の出力は、デフォルトで各 x** ファイルに 1000 行が含まれていることを確認しています。
2.-a オプションを使用してサフィックスの長さを変更します
上記の例 1 で説明したように、デフォルトの接尾辞の長さは 2 です。ただし、これは -a オプションを使用して変更できます。
次の例でわかるように、分割ファイルで長さ 5 のサフィックスを使用しています。
$ split -a5 split.zip $ ls split.zip xaaaac xaaaaf xaaaai xaaaal xaaaao xaaaar xaaaau xaaaax xaaaba xaaabd xaaabg xaaabj xaaabm xaaaaa xaaaad xaaaag xaaaaj xaaaam xaaaap xaaaas xaaaav xaaaay xaaabb xaaabe xaaabh xaaabk xaaabn xaaaab xaaaae xaaaah xaaaak xaaaan xaaaaq xaaaat xaaaaw xaaaaz xaaabc xaaabf xaaabi xaaabl xaaabo
注:以前、他のファイル操作ユーティリティ (tac、rev、paste) についても説明しました。
3. -b オプションを使用して分割ファイル サイズをカスタマイズ
各出力分割ファイルのサイズは、-b オプションを使用して制御できます。
この例では、分割ファイルは 200000 バイトのサイズで作成されました。
$ split -b200000 split.zip $ ls -lart total 21084 drwxrwxr-x 3 himanshu himanshu 4096 Sep 26 21:20 .. -rw-rw-r-- 1 himanshu himanshu 10767315 Sep 26 21:21 split.zip -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xad -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xac -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xab -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xaa -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xah -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xag -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xaf -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xae -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xar ... ... ...
4. -d オプションを使用して、数値サフィックス付きの分割ファイルを作成
上記の例に見られるように、出力の形式は x** で、** はアルファベットです。 -d オプションを使用してこれを number に変更できます。
ここに例があります。これには、分割されたファイルに数字の接尾辞が付いています。
$ split -d split.zip $ ls split.zip x01 x03 x05 x07 x09 x11 x13 x15 x17 x19 x21 x23 x25 x27 x29 x31 x33 x35 x37 x39 x00 x02 x04 x06 x08 x10 x12 x14 x16 x18 x20 x22 x24 x26 x28 x30 x32 x34 x36 x38 x40
5. -C オプションを使用して分割チャンクの数をカスタマイズ
チャンクの数を制御するには、-C オプションを使用してください。
この例では、50 個の分割ファイルのチャンクが作成されます。
$ split -n50 split.zip $ ls split.zip xac xaf xai xal xao xar xau xax xba xbd xbg xbj xbm xbp xbs xbv xaa xad xag xaj xam xap xas xav xay xbb xbe xbh xbk xbn xbq xbt xbw xab xae xah xak xan xaq xat xaw xaz xbc xbf xbi xbl xbo xbr xbu xbx
6. -e オプションを使用してサイズがゼロのチャンクを避ける
比較的小さなファイルを多数のチャンクに分割する場合、値が追加されないため、サイズがゼロのチャンクは避けることをお勧めします。これは -e オプションを使用して実行できます。
以下に例を示します:
$ split -n50 testfile $ ls -lart x* -rw-rw-r-- 1 himanshu himanshu 0 Sep 26 21:55 xag -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xaf -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xae -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xad -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xac -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xab -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xaa -rw-rw-r-- 1 himanshu himanshu 0 Sep 26 21:55 xbx -rw-rw-r-- 1 himanshu himanshu 0 Sep 26 21:55 xbw -rw-rw-r-- 1 himanshu himanshu 0 Sep 26 21:55 xbv ... ... ...
したがって、上記の出力では、サイズがゼロのチャンクが多数生成されていることがわかります。それでは、-e オプションを使用して結果を見てみましょう:
$ split -n50 -e testfile $ ls split.zip testfile xaa xab xac xad xae xaf $ ls -lart x* -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xaf -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xae -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xad -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xac -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xab -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xaa
したがって、上記の出力ではサイズがゼロのチャンクが生成されていないことがわかります。
7. -l オプションを使用して行数をカスタマイズ
出力分割ファイルごとの行数は、-l オプションを使用してカスタマイズできます。
以下の例に示すように、分割ファイルは 20000 行で作成されます。
$ split -l20000 split.zip $ ls split.zip testfile xaa xab xac $ wc -l x* 20000 xaa 20000 xab 947 xac 40947 total
–verbose オプションを使用して詳細情報を取得
新しい分割ファイルが開かれるたびに診断メッセージを取得するには、以下に示すように –verbose オプションを使用します。
$ split -l20000 --verbose split.zip creating file `xaa' creating file `xab' creating file `xac'
Linux Join コマンドの例
8.基本的な結合の例
結合コマンドは、最初のフィールドを照合することにより、2 つのファイル (入力として提供) の最初のフィールドで機能します。
以下に例を示します:
$ cat testfile1 1 India 2 US 3 Ireland 4 UK 5 Canada $ cat testfile2 1 NewDelhi 2 Washington 3 Dublin 4 London 5 Toronto $ join testfile1 testfile2 1 India NewDelhi 2 US Washington 3 Ireland Dublin 4 UK London 5 Canada Toronto
したがって、最初のフィールドに基づいて、国を含むファイルが首都を含む別のファイルと結合されていることがわかります。
9.ソート済みリストの作品に参加
join コマンドに指定された 2 つのファイルのいずれかがソートされていない場合、出力に警告が表示され、その特定のエントリは結合されません。
この例では、入力ファイルがソートされていないため、警告/エラー メッセージが表示されます。
$ cat testfile1 1 India 2 US 3 Ireland 5 Canada 4 UK $ cat testfile2 1 NewDelhi 2 Washington 3 Dublin 4 London 5 Toronto $ join testfile1 testfile2 1 India NewDelhi 2 US Washington 3 Ireland Dublin join: testfile1:5: is not sorted: 4 UK 5 Canada Toronto
10. -i オプションを使用して大文字と小文字を区別しない
フィールドを比較する場合、以下に示すように -i オプションを使用して大文字と小文字の違いを無視できます。
$ cat testfile1 a India b US c Ireland d UK e Canada $ cat testfile2 a NewDelhi B Washington c Dublin d London e Toronto $ join testfile1 testfile2 a India NewDelhi c Ireland Dublin d UK London e Canada Toronto $ join -i testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London e Canada Toronto
11. –check-order オプションを使用して入力がソートされていることを確認します
ここに例があります。 testfile1 は最後までソートされていなかったため、出力でエラーが生成されました。
$ cat testfile1 a India b US c Ireland d UK f Australia e Canada $ cat testfile2 a NewDelhi b Washington c Dublin d London e Toronto $ join --check-order testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London join: testfile1:6: is not sorted: e Canada
12. –nocheck-order オプションを使用してソート度をチェックしない
これは前の例の反対です。この例では、並べ替えのチェックは行われず、エラー メッセージは表示されません。
$ join --nocheck-order testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London
13. -a オプションを使用してペアリングできない行を出力
両方の入力ファイルを 1 対 1 でマップできない場合は、-a[FILENUM] オプションを使用して、比較中にペアにすることができない行を含めることができます。 FILENUM はファイル番号 (1 または 2) です。
次の例では、-a1 を使用すると、testfile2 にペアがない testfile1 の最後の行 (以下で太字でマーク) が生成されることがわかります。
$ cat testfile1 a India b US c Ireland d UK e Canada f Australia $ cat testfile2 a NewDelhi b Washington c Dublin d London e Toronto $ join testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London e Canada Toronto $ join -a1 testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London e Canada Toronto f Australia
14. -v オプションを使用して対になっていない行のみを出力
上記の例では、対になっている行と対になっていない行の両方が出力に生成されました。ただし、対になっていない出力のみが必要な場合は、以下に示すように -v オプションを使用してください。
$ join -v1 testfile1 testfile2 f Australia
15. -1 および -2 オプションを使用して、両方のファイルの異なる列に基づいて結合
デフォルトでは、両方のファイルの最初の列が結合前の比較に使用されます。 -1 および -2 オプションを使用して、この動作を変更できます。
次の例では、testfile1 の最初の列を testfile2 の 2 番目の列と比較して、結合コマンドの出力を生成しています。
$ cat testfile1 a India b US c Ireland d UK e Canada $ cat testfile2 NewDelhi a Washington b Dublin c London d Toronto e $ join -1 1 -2 2 testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London e Canada Toronto