根据上下文行将文件分割成多个部分
命令语法格式
csplit [OPTION]… FILE PATTERN…
命令描述
csplit可以将一个大文件中的内容进行分割,然后将得到的各个部分分别写入不同的文件中。其中,分割点是与PATTERN匹配的行。在任何情况下,按排序顺序连接所有的输出文件都可以会生成原始输入文件。
由csplit产生的输出文件的内容由PATTERN参数确定,如下所述。如果PATTERN参数指向了输入文件的不存在行(例如,如果没有任何行可以与给定的正则表达式匹配),则会发生错误。csplit使用PATTERN与文件内容进行匹配查找,如果匹配到行,则会将匹配行之前的内容写入文件。如果后面还有PATTERN,则csplit只会将文件的剩余部分与下一个PATTERN进行匹配。以此类推。在每个PATTERN都匹配后,剩余的输入将被复制到最后一个输出文件中。
输出文件的名称由一个前缀(默认为’xx’),然后加一个后缀组成。默认情况下,后缀是从’00’到’99’的两位十进制数的升序,形如’xx00′, ‘xx01’, …。在任何情况下,按排序顺序连接所有的输出文件都可以会生成原始输入文件。
默认情况下,csplit在创建完文件后,会打印出写入每个输出文件的字节数。
如果FILE为-,则从标准输入中读取文件。
默认情况下,如果csplit遇到错误或收到hangup, interrupt, quit, terminate信号,它将在退出之前删除创建的所有输出文件。
命令支持的选项及含义
长选项的必填参数,在短选项中也是必须提供的。
-b, –suffix-format=FORMAT
修改生成文件的后缀,使用格式FORMAT作为输出文件名后缀。默认为两位数值‘%02d’。当指定此选项时,后缀字符串FORMAT必须包含一个printf(3)式转换规范,可能包括格式规范标志,字段宽度,精度规格或所有这些类型的修饰符。格式字母必须将二进制无符号整数参数转换为可读形式。格式字母’d’和’i’是’u’的别名,允许’u’,’o’,’x’和’X’转换。整个格式FORMATh会发送给sprintf(3)来格式化文件名后缀,依次为每个单独的输出文件形成文件名后缀。
如果使用此选项,则会忽略–digits选项。
-f, –prefix=PREFIX
修改输出文件名的前缀。默认为’xx’。
-k, –keep-files
发生错误时,不要删除已经生成的文件。默认情况下,如果csplit遇到错误或收到hangup, interrupt, quit, terminate信号,它将在退出之前删除创建的所有输出文件。
–suppress-matched
不要输出符合PATTERN的行。即,下一个文件中不会包含作为上一个文件结束分界线的行。
但是,如果这个文件是“结束文件”(所以PATTERN都匹配结束后,剩余的输入内容),那它包含了上一个文件的结束分界线的行。详见下面的「关于–suppress-matched选项」示例。
-n, –digits=DIGITS
指定生成文件名中后缀数字的长度。默认为长度为2,即两位数字。
-s, –quiet, –silent
默认csplit会输出写入每个文件的字节数。
-z, –elide-empty-files
不要生成空的输出文件。如果输入文件的一行就匹配PATTERN,那么第一个输出文件通常是空文件。输出文件名的序列号始终从0开始,即使指定了此选项移除了空文件,对于那些非空的文件名也是从零开始。
–help
显示帮助信息并退出。
–version
显示版本信息并退出。
PATTERN参数的取值如下:
偏移量OFFSET要求格式是一个加号(+)或者减号(-)后跟一个数字。
使用示例
关于–suppress-matched选项
# seq 14 | csplit –suppress-matched – ‘/[79]$/’ ‘/[79]$/’
12
2
17
# head *
==> xx00 <==
1
2
3
4
5
6
==> xx01 <==
8
==> xx02 <==
9
10
11
12
13
14
生成第二个文件时,没有了做为第一个文件分割边界的行`7`。但是,第二个文件结束后,第三个文件是“结束文件”(即,包含剩余输入的文件),其中包含了边界行`9`。
相关手册
查看在线手册:http://www.gnu.org/software/coreutils/csplit
查看info手册:info ‘(coreutils) csplit invocation’
参考文献
- man 1 csplit, version GNU coretuils 8.26
更新日志
- 06/06/2018 创建文章