分割コマンドについて学習しやすくするために、17170行と1.4MBのサイズを含む比較的大きなテキストファイルを使用しています。このファイルのコピーはGitHubリンクからダウンロードできます。
これらの例では、ファイルサイズが大きいため、出力を直接表示しないことに注意してください。 llコマンドとwcコマンドを使用して、ファイルの変更を強調表示します。
分割コマンドの例の出力を理解するために、wcコマンドをざっと見てみることをお勧めします。
Linuxでの分割コマンドの例
分割コマンドの構文は次のとおりです。
split [options] filename [prefix]
Linuxでファイルを分割するためにそれを使用する方法を見てみましょう。
1。ファイルを複数のファイルに分割する
デフォルトでは、splitコマンドは1000行ごとに新しいファイルを作成します。プレフィックスが指定されていない場合は、「x」が使用されます。次の文字はファイルを列挙するため、xaaが最初に来て、次にxab、というように続きます。
サンプルログファイルを分割してみましょう:
split someLogFile.log
lsコマンドを使用すると、ディレクトリに複数の新しいファイルが表示されます。
[email protected]:~/Documents$ ls
someLogFile.log xab xad xaf xah xaj xal xan xap xar
xaa xac xae xag xai xak xam xao xaq
wcを使用すると、分割後の行数をすばやく確認できます。
[email protected]:~/Documents$ wc -l xaa xaq xar
1000 xaa
1000 xaq
170 xar
以前から、最初のファイルに17,170行が含まれていることを思い出してください。したがって、18個の新しいファイルを作成することで、プログラムが期待どおりに実行されたことがわかります。そのうち17行はそれぞれ1000行で埋められ、最後の1行には残りの170行があります。
何が起こっているかを示すもう1つの方法は、verboseオプションを指定してコマンドを実行することです。冗長に慣れていない場合は、見逃していることになります。システムが実行していることに関するより詳細なフィードバックを提供し、多くのコマンドで使用できます。
split someLogFile.log --verbose
コマンドで何が起こっているかをディスプレイで確認できます:
creating file 'xaa'
creating file 'xab'
creating file 'xac'
creating file 'xad'
creating file 'xae'
creating file 'xaf'
creating file 'xag'
creating file 'xah'
creating file 'xai'
creating file 'xaj'
creating file 'xak'
creating file 'xal'
creating file 'xam'
creating file 'xan'
creating file 'xao'
creating file 'xap'
creating file 'xaq'
creating file 'xar'
2。ファイルを特定の行番号を持つ複数のファイルに分割する
ファイルが1000行のファイルに分割されるのは気に入らないかもしれません。この動作は-l
で変更できます オプション。
これが追加されると、新しい各ファイルに必要な行数を指定できるようになります。
split someLogFile.log -l 500
ご想像のとおり、分割されたファイルには、最後のファイルを除いて、それぞれ500行あります。
[email protected]:~/Documents$ wc -l xbh xbi
500 xbh
170 xbi
これで、さらに多くのファイルができましたが、各ファイルの行数は半分になりました。
3。ファイルをn個のファイルに分割する
-n
オプションを使用すると、指定した数のピースまたはチャンクに簡単に分割できます。 -nの後に整数値を追加することで、必要な数のファイルを割り当てることができます。
split someLogFile.log -n 15
これで、15個の新しいファイルがあることがわかります。
[email protected]:~/Documents$ ls
someLogFile.log xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao
4。カスタム名プレフィックス付きのファイルを分割
分割を使用したいが、「x」を使用する代わりに、ファイルの元の名前を保持するか、新しい名前を完全に作成する場合はどうなりますか?
記事の冒頭で説明した構文の一部としてプレフィックスを見たことを覚えているかもしれません。ソースファイルの後に独自のカスタムファイル名を書き込むことができます。
split someLogFile.log someSeparatedLogFiles.log_
これは、指定されたプレフィックスで始まる名前の分割ファイルです。
[email protected]:~/Documents$ ls
someLogFile.log someSeparatedLogFiles.log_aj
someSeparatedLogFiles.log_aa someSeparatedLogFiles.log_ak
someSeparatedLogFiles.log_ab someSeparatedLogFiles.log_al
someSeparatedLogFiles.log_ac someSeparatedLogFiles.log_am
someSeparatedLogFiles.log_ad someSeparatedLogFiles.log_an
someSeparatedLogFiles.log_ae someSeparatedLogFiles.log_ao
someSeparatedLogFiles.log_af someSeparatedLogFiles.log_ap
someSeparatedLogFiles.log_ag someSeparatedLogFiles.log_aq
someSeparatedLogFiles.log_ah someSeparatedLogFiles.log_ar
someSeparatedLogFiles.log_ai
5。接尾辞の長さを分割して指定する
Splitは、デフォルトのサフィックス長2 [aa、abなど]を備えています。これはファイル数が増えると自動的に変更されますが、手動で変更したい場合はそれも可能です。たとえば、ファイルにsomeSeparatedLogFiles.log_aaaabのような名前を付けたいとします。
どうすればこれを行うことができますか?オプション-a
接尾辞の長さを指定できます。
split someLogFile.log someSeparatedLogFiles.log_ -a 5
そして、ここに分割ファイルがあります:
[email protected]:~/Documents$ ls
someLogFile.log someSeparatedLogFiles.log_aaaae someSeparatedLogFiles.log_aaaaj someSeparatedLogFiles.log_aaaao
someSeparatedLogFiles.log_aaaaa someSeparatedLogFiles.log_aaaaf someSeparatedLogFiles.log_aaaak someSeparatedLogFiles.log_aaaap
someSeparatedLogFiles.log_aaaab someSeparatedLogFiles.log_aaaag someSeparatedLogFiles.log_aaaal someSeparatedLogFiles.log_aaaaq
someSeparatedLogFiles.log_aaaac someSeparatedLogFiles.log_aaaah someSeparatedLogFiles.log_aaaam someSeparatedLogFiles.log_aaaar
someSeparatedLogFiles.log_aaaad someSeparatedLogFiles.log_aaaai someSeparatedLogFiles.log_aaaan
6。番号順の接尾辞で分割
これまで、さまざまな文字の組み合わせを使用してファイルが分離されているのを見てきました。個人的には、数字を使用してファイルを区別する方がはるかに簡単だと思います。
前の例の接尾辞の長さを維持しますが、オプション-d
を使用してアルファベットの構成を数値に変更します 。
split someLogFile.log someSeparatedLogFiles.log_ -a 5 -d
これで、数値で十分な分割ファイルが作成されます。
[email protected]:~/Documents$ ls
someLogFile.log someSeparatedLogFiles.log_00004 someSeparatedLogFiles.log_00009 someSeparatedLogFiles.log_00014
someSeparatedLogFiles.log_00000 someSeparatedLogFiles.log_00005 someSeparatedLogFiles.log_00010 someSeparatedLogFiles.log_00015
someSeparatedLogFiles.log_00001 someSeparatedLogFiles.log_00006 someSeparatedLogFiles.log_00011 someSeparatedLogFiles.log_00016
someSeparatedLogFiles.log_00002 someSeparatedLogFiles.log_00007 someSeparatedLogFiles.log_00012 someSeparatedLogFiles.log_00017
someSeparatedLogFiles.log_00003 someSeparatedLogFiles.log_00008 someSeparatedLogFiles.log_00013
7。分割ファイルに16進サフィックスを追加する
接尾辞を作成するためのもう1つのオプションは、順序付けられた文字と数字を交互に使用する組み込みの16進接尾辞で使用することです。
この例では、すでに示したいくつかのことを組み合わせます。自分のプレフィックスを使用してファイルを分割します。読みやすくするためにアンダースコアを選択しました。
-x
を使用しました 16進サフィックスを作成するオプション。次に、ファイルを50のチャンクに分割し、接尾辞の長さを6にしました。
split someLogFile.log _ -x -n50 -a6
上記のコマンドの結果は次のとおりです。
[email protected]:~/Documents$ ls
_000000 _000003 _000006 _000009 _00000c _00000f _000012 _000015 _000018 _00001b _00001e _000021 _000024 _000027 _00002a _00002d _000030
_000001 _000004 _000007 _00000a _00000d _000010 _000013 _000016 _000019 _00001c _00001f _000022 _000025 _000028 _00002b _00002e _000031
_000002 _000005 _000008 _00000b _00000e _000011 _000014 _000017 _00001a _00001d _000020 _000023 _000026 _000029 _00002c _00002f someLogFile.log
8。ファイルを特定のサイズの複数のファイルに分割する
ファイルサイズを使用して、ファイルを分割して分割することもできます。サイズが制限されたネットワークを介して、できるだけ効率的に大きなファイルを送信する必要があるかもしれません。要件に合わせて正確なサイズを指定できます。
オプションを追加し続けると、構文が少し複雑になる可能性があります。そこで、-b
コマンドは例を示す前に機能します。
特定のサイズのファイルを作成する場合は、-b
を使用します オプション。その後、 nと書くことができます K [B]、 n M [B]、 n G[B]ここでn はファイルサイズの値であり、K [1024]は-kibi、Mは-mebi、Gは-gibiなどです。 KB [1000]はキロ、MB –メガなどです。
多くのことが起こっているように見えるかもしれませんが、それを分解するとそれほど複雑ではありません。ソースファイル、宛先ファイル名プレフィックス、数値サフィックス、およびファイルサイズによる128kBの区切りを指定しました。
split someLogFile.log someSeparatedLogFiles.log_ -d -b 128KB
分割されたファイルは次のとおりです。
[email protected]:~/Documents$ ls
someLogFile.log someSeparatedLogFiles.log_02 someSeparatedLogFiles.log_05 someSeparatedLogFiles.log_08
someSeparatedLogFiles.log_00 someSeparatedLogFiles.log_03 someSeparatedLogFiles.log_06 someSeparatedLogFiles.log_09
someSeparatedLogFiles.log_01 someSeparatedLogFiles.log_04 someSeparatedLogFiles.log_07 someSeparatedLogFiles.log_10
「wc」コマンドで結果を確認できます。
[email protected]:~/Documents$ wc someSeparatedLogFiles.log_0*
1605 4959 128000 someSeparatedLogFiles.log_00
1605 4969 128000 someSeparatedLogFiles.log_01
1605 4953 128000 someSeparatedLogFiles.log_02
1605 4976 128000 someSeparatedLogFiles.log_03
1605 4955 128000 someSeparatedLogFiles.log_04
1605 4975 128000 someSeparatedLogFiles.log_05
1605 4966 128000 someSeparatedLogFiles.log_06
1605 4964 128000 someSeparatedLogFiles.log_07
1605 4968 128000 someSeparatedLogFiles.log_08
1605 4959 128000 someSeparatedLogFiles.log_09
16050 49644 1280000 total
9。ファイルを「最大」サイズの複数のファイルに分割しますn と
ファイルをほぼ同じサイズに分割したいが、行構造を保持したい場合は、これが最適な選択かもしれません。 -C
を使用 、最大サイズを指定できます。次に、プログラムは完全な行に基づいてファイルを自動的に分割します。
split someLogFile.log someNewLogFiles.log_ -d -C 1MB
出力では、最初の分割ファイルのサイズがほぼ1MBであるのに対し、ファイルの残りの部分は2番目のファイルにあることがわかります。
[email protected]:~/Documents$ ll
total 2772
drwxr-xr-x 2 chris chris 81920 Jul 24 22:01 ./
drwxr-xr-x 19 chris chris 4096 Jul 23 22:23 ../
-rw-r--r-- 1 chris chris 1369273 Jul 20 17:52 someLogFile.log
-rw-r--r-- 1 chris chris 999997 Jul 24 22:01 someNewLogFiles.log_00
-rw-r--r-- 1 chris chris 369276 Jul 24 22:01 someNewLogFiles.log_01
ボーナスのヒント:分割ファイルの再結合
これは分割コマンドではありませんが、新しいユーザーには役立つ可能性があります。
[email protected]:~/Documents$ ls
xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao xap xaq xar
別のコマンドを使用して、これらのファイルを再結合し、完全なドキュメントのレプリカを作成できます。 catコマンドは、連結の略で、「アイテムを結合する」という意味の単なる空想の言葉です。すべてのファイルは文字「x」で始まるため、アスタリスクはその文字で始まるすべてのファイルにコマンドを適用します。
[email protected]:~/Documents$ cat x* > recoveredLogFile.log
[email protected]:~/Documents$ ls
recoveredLogFile.log xab xad xaf xah xaj xal xan xap xar
xaa xac xae xag xai xak xam xao xaq
ご覧のとおり、再作成されたファイルは元のファイルと同じサイズです。
wc -l recreatedLogFile.log
17170 recreatedLogFile.log
フォーマット(行数を含む)は、作成されたファイルに保持されます。
Linuxを初めて使用する場合は、このチュートリアルがsplitコマンドの理解に役立つことを願っています。経験豊富な方は、下のコメントでスプリットのお気に入りの使い方を教えてください!
初心者または経験豊富な方は、Linuxコマンドラインでファイルを分割するための少し優れた方法であるcsplitコマンドも確認することをお勧めします。