前言
在工作中偶尔会需要将一个大文件切割为若干个小文件的需求,其实这种功能当然可以用代码来实现,不过
linux
系统就已经自带了split
命令可以让我们快速实现文件切割这个功能,还支持我们进行文件的重命名,下面进入正题来讲一下这个命令的使用。
一、split命令的语法
split [选项]... [输入 [前缀]]
参数 | 含义 |
---|---|
- -b 或者-- bytes=size | 对file进行切分 每个小文件大小为size 可以指定单位b,k,m |
- -l -- lines=number | 对file进行切分 每个文件都有number行 |
- -a num | 后缀长度,和生成切割后的文件名相关 |
-d | 表示切割后的文件使用数字后缀 |
- -c <字节> | 与参数"-b"相似,但是在切割时将尽量维持每行的完整性 |
二、案例演示
准备测试数据,生成一个数字组成的文件,总大小48K
echo {1..10000} > a.txt
image.png
案例1:根据10K作为一个单位进行文本切割
split -b 10k a.txt
执行结果1
可以看到,文件确实被分割成多个文件了,而且是以
xaa
开始依次递增排序。
案例2:根据100行作为一个单位进行文本切割
split -l 100 a.txt
执行结果2
案例3:按100行进行切割,且前缀名统一为“result”,后缀部分改成用4位数字来表示
split -l 100 a.txt -d -a 4 result
下面来简单介绍一下这里的参数作用
- -l 100 表示根据100行作为切割单位
- -d -a 4 表示根据数字来作为后缀,且数字位的长度为4
- result 表示使用result作为文件名前缀
三、命令的缺陷和优化方案——让命令支持自定义后缀
相信各位读者也发现了,split
命令确实十分强大,但是对于文件的命名上还不够灵活,不支持命名后缀,比如我希望生成的格式是result + 4位数字 + .csv
的文件,但split
并不支持这样操作。我们可以结合xargs
命令来满足我们的需要,把每个生成的文件进行重命名
案例4:按1000行分割,生成的文件格式为:result_ + 3位数字 + .csv
split -l 1000 a.txt -d -a 3 result_ && ls | grep result_ | xargs -n1 -I {} mv {} {}.csv
这里我们简单介绍一下xargs
命令的作用
- -n 1 表示一次只接受1个参数
- -I {} 表示需要替换字符串,并且把入参暂时用{}进行表示
- mv {} {}.csv 把原文件名新增
.csv
后缀
执行结果
网友评论