开发手册 欢迎您!
软件开发者资料库

Linux csplit 命令

Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。本文主要介绍Linux csplit 命令。

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"/