Linux 中 Split 命令的 9 个有用示例

为了帮助您了解 split 命令,我使用了一个相对较大的文本文件,其中包含 17170 行和 1.4 MB 的大小。 你可以 从 GitHub 链接下载此文件的副本.

请注意,由于文件较大,我不会在这些示例中直接显示输出。 我将使用 ll 和 wc 命令来突出显示文件更改。

我建议您快速查看 wc 命令以了解 split 命令示例的输出。

Linux 中的 Split 命令示例

这是拆分命令的语法:

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 行,最后一个填充了剩余的 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 行,除了最后一个。

[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. 使用自定义名称前缀拆分文件

如果您想使用 split 但保留我文件的原始名称或完全创建一个新名称而不是使用“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.拆分并指定后缀长度

拆分功能默认 后缀 长度为 2 [aa, ab, etc.]. 这将随着文件数量的增加而自动更改,但如果您想手动更改它,那也是可能的。 因此,假设您希望我们的文件命名为类似 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.用数字顺序后缀拆分

到目前为止,您已经看到使用不同字母组合分隔的文件。 就个人而言,我发现使用数字区分文件要容易得多。

让我们保持前一个的后缀长度 example,但使用选项将字母组织更改为数字 -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. 为分割文件附加十六进制后缀

创建后缀的另一个选项是在内置的十六进制后缀中使用,它交替排列有序的字母和数字。

为了这 example,我将结合我已经向您展示的一些内容。 我将使用我自己的前缀拆分文件。 出于可读性目的,我选择了下划线。

我使用了 -x 创建十六进制后缀的选项。 然后我将我们的文件分成 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 命令在显示之前工作 example.

如果要创建特定大小的文件,请使用 -b 选项。 然后你可以写 nK[B], 毫微米[B], ng[B] 其中 n 是文件大小和 K 的值 [1024] 是-kibi,M 是-mebi,G 是-gibi,依此类推。 知识库 [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,而文件的其余部分在第二个文件中。

[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 命令是 concatenate 的缩写,它只是一个花哨的词,意思是“将项目连接在一起”。 由于所有文件都以字母“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 命令。 如果您更有经验,请在下面的评测中告诉我们您最喜欢使用 split 的方式!

初学者或有经验的人,我建议你也看看 csplit 命令,它是在 Linux 命令行中拆分文件的一种更好的方法。

相关阅读:

Posted in: Linux