# csplit - 将一个大文件分割成小的碎片文件

csplit命令 用于将一个大文件分割成小的碎片,并且将分割后的每个碎片保存成一个文件。碎片文件的命名类似“xx00”,“xx01”。csplit命令是split的一个变体,split只能够根据文件大小或行数来分割,但csplit能够根据文件本身特点来分割文件。

将文件按照指定的模式分割,默认的输出文件名是xx00、xx01、xx02等,指令会显示每个输出文件的大小。

# 适用范围

RedHat
RHEL
Ubuntu
CentOS
Debian
Deepin
SUSE
openSUSE
Fedora
Linux Mint
Alpine Linux
Arch Linux

# 语法

csplit  [选项]  file  格式

# 选项

-b, --suffix-format=FORMAT       # 使用sprintf格式而不是%02d
-f name,  --prefix=PREFIX        # 指定输出文件的前缀名字,而不是使用“xx”
-k, --keep-files                 # 不要删除错误的输出文件
-n num                           # 指定输出文件名的字符数,这里指文件名中的序号长度
-z, --elide-empty-files          # 删除空文件
-s, --quiet, --silent            # 不显示输出文件的大小

--help                           # 显示帮助文档
--version                        # 显示命令版本信息

# 格式

  • 整数 : 不包括指定的行,并以其为文件分块边界
  • /表达式/[偏移量] : 不包括匹配到的行,并以其为文件分块边界
  • %表达式%[偏移量] : 预先跳过匹配的行数,以其为文件分块边界
  • {整数} : 将之前指定的模式重复指定的次数
  • {*} : 将之前指定的模式重复尽可能多的次数

# 举例

[sogrey@bogon newDir]$ ls
test.txt
[sogrey@bogon newDir]$ cat test.txt # 查看文件内容
石家庄今日新增16例确诊病例
中国留美博士遇害 美驻华使馆慰问
特朗普夫人发文谴责国会暴乱
理塘文旅公司回应丁真抽烟
北京一确诊者隐瞒行程不配合流调
山西晋中新增2例无症状感染者
[sogrey@bogon newDir]$ csplit test.txt 3 # 从第3行开始分割,输出分割后的文件大小
86
164
[sogrey@bogon newDir]$ ls
test.txt  xx00  xx01
[sogrey@bogon newDir]$ cat xx00  # 分别查看每个片段文件输出文件内容
石家庄今日新增16例确诊病例
中国留美博士遇害 美驻华使馆慰问
[sogrey@bogon newDir]$ cat xx01
特朗普夫人发文谴责国会暴乱
理塘文旅公司回应丁真抽烟
北京一确诊者隐瞒行程不配合流调
山西晋中新增2例无症状感染者
[sogrey@bogon newDir]$ csplit -n 3 -f new test.txt 3  # 指定输出文案前缀te,名字长度3个。这里指文件名中的序号是3个长度
86
164
[sogrey@bogon newDir]$ ls
new000  new001  test.txt  xx00  xx01
[sogrey@bogon newDir]$