在Linux中的命令行工作时,您可能会发现自己处于需要将文件分割成多个部分的情况。 如果您已经在寻找一种方法来做到这一点,或者只是想知道如何做到这一点,您将很高兴知道存在一个名为csplit的工具,这个工具是为此而设计的。
在本教程中,我们将讨论此工具的基础知识以及如何使用它。 但是在我们这样做之前,值得一提的是,这里提到的所有命令/指令都已经在Ubuntu 16.04LTS上进行了测试。
Linux Csplit命令
命令的手册页面如何定义它:
csplit - split a file into sections determined by context lines
以下是其通用语法:
csplit [OPTION]... FILE PATTERN...
csplit创建的各个小文件的名称如xx00和xx01。 以下定义 - 从命令的手册页 - 应该使事情更清楚:
Output pieces of FILE separated by PATTERN(s) to files 'xx00', 'xx01', ..., and output byte
counts of each piece to standard output.
以下Q&A类型的示例应该让您了解csplit命令的工作原理。
Q1。 如何根据行数拆分文件?
假设您的文件包含6行,并且要求将该文件拆分为第三行,则可以通过在命令和文件名之后传递“3”作为命令行参数来完成。
例如,在我们的例子中,file1包含以下几行:
1 Asia
2 Africa
3 Europe
4 North America
5 South America
6 Australia
这是我们执行的命令:
csplit file1 3
输出中产生的数字是命令产生的文件的字节数。 不用说,输出中产生了两个文件,即xx00和xx01。
这些文件的内容确认分组发生在行号3。
Q2。 如何使用正则表达式分割文件?
您还可以使用带有csplit命令的正则表达式。 例如,在以前的情况下,如果您希望工具再次重复该模式,那么可以使用以下命令来执行此操作:
csplit file1 3 {1}
所以在这种情况下,产生了三个输出文件:
Q3。 如何使用自定义前缀而不是默认的“xx”?
默认情况下,csplit在输出中生成的文件具有“xx”作为前缀。 但是,如果需要,可以使用-f命令行选项来更改前缀,这需要新的前缀作为其输入。
例如,以下命令将产生具有'htf'作为前缀的文件。
csplit file1 1 -f htf
Q4。 如何强制csplit在出错时不删除输出文件?
默认情况下,csplit命令会在遇到错误情况时立即删除输出文件(如果已创建)。 例如,以下截图确认没有输出文件最终生成:
但是,如果需要,可以使用命令中的-k选项来更改此行为。 例如,相同的命令被再次执行,但是使用此选项,并且输出文件没有被删除。
Q5。 如何抑制匹配输入模式的行?
csplit命令还提供了一个选项来抑制与输入模式匹配的行。 该选项是 - 抑制匹配 。
例如,以下命令将文件(file1)分割为第2行(xx00将包含第1行,而xx11将包含其余的行)。
csplit file1 2
但是如果要禁止第2行,则可以运行以下命令:
csplit --suppress-matched file1 2
Q6。 如何使用自定义数字而不是默认值2?
就像前缀本身一样,输出文件名中前缀的数字位数也是可定制的。 所以假设你想要像xx000和xx0001这样的名字,你可以使用-n命令行选项来执行此操作,这需要输入数字来表示新的位数。
例如:
csplit -n 1 file1 2
上述命令将产生像xx0,xx1等文件名。
结论
平均Linux命令行用户可能不需要每天使用csplit,但这绝对是您至少应该知道的重要实用程序。 我们已经介绍了大多数基本示例和命令行选项。 尝试一下,然后前往工具的手册页 ,了解更多信息。