Linux split命令
为了了解split命令,我使用了一个相对较大的文本文件,其中包含17170行,大小为1.4 MB。
我们可以从GitHub链接下载此文件的副本。
请注意,由于文件太大,在这些示例中我不会直接显示输出。
我将使用ll和wc命令突出显示文件更改。
Linux中的Split命令示例
这是Split命令的语法:
split [options] filename [prefix]
让我们看看如何使用它在Linux中分割文件。
1.将文件拆分为多个文件
默认情况下,split命令为每1000行创建一个新文件。
如果未指定前缀,它将使用“ x”。
后面的字母会枚举文件,因此xaa首先出现,然后是xab,依此类推。
让我们分割示例日志文件:
split someLogFile.log
如果使用ls命令,则可以在目录中看到多个新文件。
Hyman@theitroad:~/Documents$ls someLogFile.log xab xad xaf xah xaj xal xan xap xar xaa xac xae xag xai xak xam xao xaq
我们可以使用wc在拆分后快速检查行数。
Hyman@theitroad:~/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行,最后一行除外。
Hyman@theitroad:~/Documents$wc -l xbh xbi 500 xbh 170 xbi
现在我们有更多的文件,但每个文件只有一半的行。
3.将文件拆分为n个文件
-n选项使拆分成指定数量的片段或者块变得容易。
我们可以通过在-n之后添加一个整数值来分配所需的文件数。
split someLogFile.log -n 15
现在我们可以看到有15个新文件。
Hyman@theitroad:~/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_
以下是名称以给定前缀开头的拆分文件。
Hyman@theitroad:~/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等]。
这将随着文件数量的增加而自动更改,但是如果我们想手动更改它,这也是可能的。
假设我们希望将文件命名为someSeparatedLogFiles.log_aaaab。
你怎么能做到这一点?
选项-a允许我们指定后缀的长度。
split someLogFile.log someSeparatedLogFiles.log_ -a 5
这是分割文件:
Hyman@theitroad:~/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
因此,现在我们将获得带有数字就足够的拆分文件。
Hyman@theitroad:~/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
这是上述命令的结果:
Hyman@theitroad:~/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
以下是拆分文件:
Hyman@theitroad:~/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”命令验证结果。
chrHyman@theitroad:~/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,而其余文件位于第二个文件中。
Hyman@theitroad:~/Documents$ll total 2772 drwxr-xr-x 2 chris chris 81920 May 24 22:01 ./ drwxr-xr-x 19 chris chris 4096 May 23 22:23 ../ -rw-r--r-- 1 chris chris 1369273 May 20 17:52 someLogFile.log -rw-r--r-- 1 chris chris 999997 May 24 22:01 someNewLogFiles.log_00 -rw-r--r-- 1 chris chris 369276 May 24 22:01 someNewLogFiles.log_01
温馨提示:重新加入分割文件
这不是拆分命令,但对新用户可能会有所帮助。
Hyman@theitroad:~/Documents$ls xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao xap xaq xar
我们可以使用另一个命令来重新加入这些文件并创建完整文档的副本。
cat命令是concatenate的缩写,它只是一个奇特的词,意思是“将项目连接在一起”。
由于所有文件均以字母“ x”开头,因此星号会将命令应用于所有以该字母开头的文件。
Hyman@theitroad:~/Documents$cat x* > recoveredLogFile.log Hyman@theitroad:~/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
我们的格式(包括行数)保留在创建的文件中。