1、命令简介
csplit:将文件分割成上下文决定的部分。
2、命令用法
csplit [options]... FILE PATTERN...
3、命令描述
split命令的英文全称是“context split”,该命令用于将一个大文件分割成小的碎片,并且将分割后的每个碎片保存成一个文件。碎片文件的命名类似“xx00”,“xx01”。csplit命令是split的一个变体,split只能够根据文件大小或行数来分割,但csplit能够根据文件本身特点来分割文件。(如果FILE为-
则为标准输入)。
4、命令选项
选项 | 描述 |
-b <输出格式>或--suffix-format=<输出格式> | 预设的输出格式其文件名称为xx00,xx01等,用户可以通过改变<输出格式>来改变输出的文件名 |
-f <输出字首字符串>或--prefix=<输出字首字符串> | 预设的输出字首字符串其文件名为xx00,xx01等,如果制定输出字首字符串为“hello”,则输出的文件名称会变成hello00,hello、01…… |
-k或--keep-files | 保留文件,就算发生错误或中断执行,与不能删除已经输出保存的文件 |
-n <输出文件名位数>或--digits=<输出文件名位数> | 预设的输出文件名位数其文件名称为xx00,xx01……如果用户指定输出文件名位数为“3”,则输出的文件名称会变成xx000,xx001等 |
-q或-s或--quiet或--silent | 不显示指令执行过程 |
-z或--elide-empty-files | 删除长度为0 Byte文件。 |
5、PATTERN(模式)
出文件的内容由PATTERN参数决定,如下所示。如果PATTERN参数指向输入文件中不存在的行(例如,如果没有剩余的行匹配给定的正则表达式),则会发生错误。在匹配每个PATTERN之后,将所有剩余的输入复制到最后一个输出文件中。默认情况下,'csplit'打印创建输出文件后写入到每个文件的字节数。输出文件的名称由前缀(默认为'xx')和后缀组成。缺省情况下,后缀为从“00”到“99”的两位十进制数字的升序。在任何情况下,按文件名顺序连接输出文件都会生成原始输入文件。默认情况下,如果'csplit'遇到错误或接收到挂起、中断、退出或终止信号,它会删除它在退出之前创建的所有输出文件。
选项 | 描述 |
N | 创建一个输出文件,其中包含第N行之前的输入, 但不包含第N行(一个正整数)。 如果后面跟着一个重复计数, 还需要为每次重复创建一个包含输入文件下一行的输出文件。 |
/REGEXP/[OFFSET] | 创建一个输出文件, 其中包含当前行到(但不包括)包含REGEXP匹配的输入文件的下一行。 可选的OFFSET是'+'或'-'后跟一个正整数。 如果给出了这个值, 则将匹配行加减OFFSET之前的输入输入到输出文件中, 之后的行开始输入的下一部分。 |
%REGEXP%[OFFSET] | 与前面的类型类似,不同的是它不创建输出文件, 因此输入文件的这一部分实际上被忽略了。 |
{REPEAT-COUNT} | 重复前面的模式REPEAT-COUNT额外的次数。 REPEAT-COUNT可以是正整数,也可以是星号, 表示重复任意次数,直到输入耗尽。 |
6、使用示例
1)拆分文件并查看拆分文件
$ cat sample.txtLine 1Line 2Line 3Line 4Line 5Line 6Line 7Line 8Line 9Line 10$ csplit sample.txt 5 28 43$ lssample.txt xx00 xx01$ cat xx00Line 1Line 2Line 3Line 4$ cat xx01Line 5Line 6Line 7Line 8Line 9Line 10
2)将文本文件filename以第 5 行为分界点切割成两份
csplit filename 5
3)将文本文件filename以80行为分界点切割成2份,并指定输出文件名的位数为3:
csplit -n 3 filename 80
4)将文本文件textfile以40行为分界点切割成2份,并指定输出文件名的前缘为fileName位数为3:
csplit -f fileName testfile 40
5)将文件 filename 以10行为单位分割8次,并指定输出文件名的格式 :
csplit -b "myfile%o% filename 10 {8}
6)将文本文件 filename 以每20行为单位分割:
csplit filename 20 {*}
7)把文件以字符串”wonhero java”为分界符,分成两部分:
csplit filename /"wonhero java"/