Linux工具|运维工具之split(MacOS版本)

📚推荐阅读

Linux工具|运维工具之split

在这里插入图片描述

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者、腾讯云TDP-KOL、ACDU成员、墨天轮技术专家博主
🔥 三连支持:欢迎 ❤️关注、👍点赞、👉收藏三连,支持一下博主~

引言

分割文件场景很常见,尤其是在日志解析或者查阅日志信息时。在我们日常的工作中,传输文件很常见,在进行文件传输的过程中,因为网络传输速率和文件内容大小的限制,经常会遇到文件传输失败的情况。针对文件传输失败的情况。大文件由于其传输时间长,一旦传输失败,重新传输费时且不一定能保证再次传输成功。针对这种情况,可以考虑将文件分割成小文件的方式进行传输,减少因传输失败或传输大小限制导致的问题。本文就是讲述如何拆分文件后再进行传输,可提升在工作中的效率。

split使用场景

● 分割文本,在有些语言中可分割字符串、分割文本、分割视频等
● 分割日志文件,协助运维同事排查日志报错等
● 分割后备份文件,用于增量存储数据等
● 处理大型数据集文件等

前期准备

主要是macOS操作系统,如果不常使用,可以直接参看Linux中的split
【测试文件信息】
此处我这里准备一个测试文件test**.sql31886行大小 24083097 字节(大约 24.1MB,此处为了方便后续测试使用)。文件信息如下:
在这里插入图片描述

语法帮助

在MacOS上使用split就更舒服了,应该是更简单、简洁、简便了。同样使用 --help 命令来查看帮助命令(其实,在macOS这里,可以使用 -h, --h, -he,-hel ,–he 等等不规则的来查询帮助,其实是一些错误的命令)。

Aion@Macbook ~ $ split --help
split: illegal option -- -
usage: split [-l line_count] [-a suffix_length] [file [prefix]]
       split -b byte_count[K|k|M|m|G|g] [-a suffix_length] [file [prefix]]
       split -n chunk_count [-a suffix_length] [file [prefix]]
       split -p pattern [-a suffix_length] [file [prefix]]
Aion@Macbook ~ $

在MacOS的命令中,有四种分割情况,分别是按行数量分割按字节数量分割按块或组数量分割按模式/方式分割,其中默认的分割方式为按行数量分割。无论是哪一种分割方式,格式统一为如下方式:

split [分割方式] [新文件前缀长度/深度] [需要被分割的文件/文件路径 [新文件前缀名称]]

1 按行数量分割

【实践】
将一个大文件切分成多个小文件,每个小文件包含指定数量的行。此处我按照 1000行为一个目标文件来分割,由于每一个行的大小不等,所以分割出来的每一个文件大小也会不等,这个毋庸置疑。分割后的文件用 test_lc_ 来标识,以区分源文件。

Aion@Macbook split-test $ split -l 1000 test01.sql test_lc_
Aion@Macbook split-test $ ls
test-all.sql test_lc_ab   test_lc_af   test_lc_aj   test_lc_an   test_lc_ar   test_lc_av   test_lc_az   test_lc_bd
test.sql     test_lc_ac   test_lc_ag   test_lc_ak   test_lc_ao   test_lc_as   test_lc_aw   test_lc_ba   test_lc_be
test01.sql   test_lc_ad   test_lc_ah   test_lc_al   test_lc_ap   test_lc_at   test_lc_ax   test_lc_bb   test_lc_bf
test_lc_aa   test_lc_ae   test_lc_ai   test_lc_am   test_lc_aq   test_lc_au   test_lc_ay   test_lc_bc
Aion@Macbook split-test $

在这里插入图片描述

【验证】
为了验证脚本执行的效果,下面看看被分割后的文件中的行数

Aion@Macbook split-test $ wc -l test_lc_*
    1000 test_lc_aa
    1000 test_lc_ab
    1000 test_lc_ac
    1000 test_lc_ad
    1000 test_lc_ae
 ……此处省略多行
    1000 test_lc_bb
    1000 test_lc_bc
    1000 test_lc_bd
    1000 test_lc_be
     886 test_lc_bf
   31886 total
Aion@Macbook split-test $

从上面的结果来看,是按照约定的规则产生每个文件1000行。

注意⚠️
总文件数量的计算规则为如下(这里说一下这个规则的意思在于后续的规则都大差不多,理解意思就可以了):
总行数 % 设定行数, 如果余数为 0 则 分割文件数 = 总行数 / 设定行数,取整数;
总行数 % 设定行数, 如果余数不为 0 则 分割文件数 = 总行数 / 设定行数 + 1,取整数

2 按字节数量分割

将一个大文件切分成多个小文件,每个小文件包含固定大小(指的是文件字节大小)。此处我是按照新产生的文件为每个5M为大小进行分割,则产生5个文件。

Aion@Macbook split-test $ split -b 5M test02.sql test_bc_
Aion@Macbook split-test $ ll test_bc_*
-rw-r--r--  1 Aion  staff  5242880 11 14 18:58 test_bc_aa
-rw-r--r--  1 Aion  staff  5242880 11 14 18:58 test_bc_ab
-rw-r--r--  1 Aion  staff  5242880 11 14 18:58 test_bc_ac
-rw-r--r--  1 Aion  staff  5242880 11 14 18:58 test_bc_ad
-rw-r--r--  1 Aion  staff  3111577 11 14 18:58 test_bc_ae
Aion@Macbook split-test $

可选择的文件大小的单位有(不区分大小写) :
● KB:K|k,每个文件多少KB
● MB:M|m,每个文件多少MB
● GB:G|g,每个文件多少GB

3 按块或组数量分割

将一个大文件切分成多个小文件,按照固定的文件数量来分割。此处我想将test03.sql 分割为3个文件。

Aion@Macbook split-test $ split -n 3 test03.sql test_cc_
Aion@Macbook split-test $
Aion@Macbook split-test $ ll test_cc_*
-rw-r--r--  1 Aion  staff  8027699 11 14 19:05 test_cc_aa
-rw-r--r--  1 Aion  staff  8027699 11 14 19:05 test_cc_ab
-rw-r--r--  1 Aion  staff  8027699 11 14 19:05 test_cc_ac
Aion@Macbook split-test $
Aion@Macbook split-test $ ll test03.sql
-rw-r--r--@ 1 Aion  staff  24083097 11 14 19:05 test03.sql
Aion@Macbook split-test $

由于此时从文件大小上正好可以分割为3个文件,所以也只能看到3个文件,chunk_count分割方法同 byte_count 分割方法可以理解为相互或者相向的。

4 按模式/方式/格式分割

-p是其中一个不太常用的选项,但在某些特定场景下可能很有用。-p 选项的作用是按每个输出文件的大小(默认是 1000 行)来分割文件,并且尽量保持每个分割后的文件包含完整的、未分割的行。也就是说,如果某一行的内容在分割点附近,那么这一行会完整地出现在某一个文件中,而不是被分割到两个文件中。

5 隐藏参数说明

一个很有意思的事情,其实我在写这篇笔记时,先在macOS上做的测试,一开始只是按照说明进行测试,后续又在 GUN/Linux 上面做了测试,发现多了一个隐藏的参数并没有在macOS里面的 --help 中说明,那就是 -d 参数。这一章节是后续补充的内容,也希望在学习或者实践时多留意下。
【含义】
这个参数的意思其实也很简单,如果你熟悉或做过正则表达式,那么就不会陌生了,他就是将文件的默认的 aa* 格式改为 00* 数字格式,通俗一些就是 将原来默认的 字母格式 修改为 数字格式。这也是产生文件的后缀类型。举例子可能更好理解:

原来默认情况下,产生的文件为下面的格式(默认两位数开始编码)
aa
ab
ac
ad
……
使用 -d 参数 后,产生的文件为下面的格式(默认两位数开始编码)
00
01
02
03
……

在这里插入图片描述

思考

在MacOS中使用split命令,参数不多,简单明了,可以快速针对文件进行分割操作。

总结

在我们日常的工作中,传输文件很常见,在进行文件传输的过程中,因为网络传输速率和文件内容大小的限制,经常会遇到文件传输失败的情况。针对文件传输失败的情况。大文件由于其传输时间长,一旦传输失败,重新传输费时且不一定能保证再次传输成功。针对这种情况,可以考虑将文件分割成小文件的方式进行传输,减少因传输失败或传输大小限制导致的问题。本文就是讲述如何拆分文件后再进行传输,可提升在工作中的效率。


欢迎关注博主 「六月暴雪飞梨花」 或加入【六月暴雪飞梨花社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六月暴雪飞梨花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值