Linux 中的 Split 命令:9 个有用的示例
Linux 中的 split 命令允许您将文件拆分为多个文件。您可以通过多种方式为给定的应用程序自定义参数。我将向您展示 split 命令的一些示例,以帮助您了解其用法。
为了帮助您了解 split 命令,我使用了一个相对较大的文本文件,包含 17170 行、大小为 1.4 MB。您可以从 GitHub 链接下载此文件的副本。
请注意,由于文件很大,我不会在这些示例中直接显示输出。我将使用 ll 和 wc 命令来突出显示文件更改。
我建议您快速浏览一下 wc 命令以了解 split 命令示例的输出。
Linux 中 Split 命令的示例
这是 Split 命令的语法:
split [options] filename [prefix]
让我们看看如何在Linux中使用它来分割文件。
1. 将文件分割成多个文件
默认情况下, split 命令每 1000 行创建一个新文件。如果没有指定前缀,它将使用“x”。后面的字母枚举文件,因此 xaa 首先出现,然后是 xab,依此类推。
让我们分割示例日志文件:
split someLogFile.log
如果使用 ls 命令,您可以在目录中看到多个新文件。
chris@discodingo:~/Documents$ ls
someLogFile.log xab xad xaf xah xaj xal xan xap xar
xaa xac xae xag xai xak xam xao xaq
您可以使用 wc 快速查看拆分后的行数。
chris@discodingo:~/Documents$ wc -l xaa xaq xar
1000 xaa
1000 xaq
170 xar
请记住,我们之前看到我们的初始文件有 17,170 行。所以我们可以看到我们的程序已经按预期完成了,创建了 18 个新文件。其中 17 个每个填充了 1000 行,最后一个填充了剩余的 170 行。
我们演示正在发生的情况的另一种方法是使用详细选项运行命令。如果您不熟悉 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 行。
chris@discodingo:~/Documents$ wc -l xbh xbi
500 xbh
170 xbi
现在您有了更多的文件,但每个文件的行数减少了一半。
3. 将文件分割成n个文件
-n
选项使分割成指定数量的片段或块变得容易。您可以通过在 -n 后面添加一个整数值来指定所需的文件数量。
split someLogFile.log -n 15
现在您可以看到有 15 个新文件。
chris@discodingo:~/Documents$ ls
someLogFile.log xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao
4.使用自定义名称前缀分割文件
如果您想使用 split 但保留文件的原始名称或完全创建一个新名称而不是使用“x”怎么办?
您可能还记得在文章开头描述的语法中看到过前缀。您可以在源文件后写入您自己的自定义文件名。
split someLogFile.log someSeparatedLogFiles.log_
以下是名称以给定前缀开头的拆分文件。
chris@discodingo:~/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
这是分割文件:
chris@discodingo:~/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
所以现在你将拥有带有数字的分割文件。
chris@discodingo:~/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. 为分割文件添加十六进制后缀
创建后缀的另一个选项是使用内置的十六进制后缀,它交替排列字母和数字。
对于这个例子,我将结合我已经向您展示的一些内容。我将使用我自己的前缀分割文件。出于可读性的目的,我选择了下划线。
我使用 -x
选项创建十六进制后缀。然后我将文件分成 50 个块,并将后缀的长度指定为 6。
split someLogFile.log _ -x -n50 -a6
这是上述命令的结果:
chris@discodingo:~/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
选项。然后您可以写 nK[B], nM[B], nG[B],其中 n 是文件大小的值,K [1024] 是 -kibi,M 是 -mebi, G 是-gibi,等等。 KB [1000] 是千,MB – 兆等。
看起来可能发生了很多事情,但当你分解它时,事情并没有那么复杂。您已指定源文件、目标文件名前缀、数字后缀以及按 128kB 文件大小分隔。
split someLogFile.log someSeparatedLogFiles.log_ -d -b 128KB
以下是分割后的文件:
chris@discodingo:~/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”命令验证结果。
chris@discodingo:~/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,而文件的其余部分位于第二个文件中。
chris@discodingo:~/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
额外提示:重新加入分割文件
这不是一个分割命令,但它可能对新用户有帮助。
chris@discodingo:~/Documents$ ls
xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao xap xaq xar
您可以使用另一个命令重新加入这些文件并创建完整文档的副本。 cat 命令是 concatenate 的缩写,它只是一个奇特的词,意思是“将项目连接在一起”。由于所有文件都以字母“x”开头,因此星号会将命令应用于以该字母开头的任何文件。
chris@discodingo:~/Documents$ cat x* > recoveredLogFile.log
chris@discodingo:~/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 命令。如果您更有经验,请在下面的评论中告诉我们您最喜欢的 split 使用方式!
无论是初学者还是经验丰富的人,我建议您也看看 csplit 命令,这是在 Linux 命令行中分割文件的更好的方法。