我想将 .txt 文件的内容拆分为多个文件,但遇到两个有关 csplit 限制的问题:
(1) 任何人都可以提供一种解决 csplit '99' 文件分割最大限制的方法吗?我的文件包含基于重复出现的空行或字符的最多 384 个分割。我希望 csplit 能够使用 {*} 来适应这一点,但这超出了 csplit 的固有文件生成能力。
(2) 有谁知道将文件内容传递给 csplit (管道到 csplit)的方法,或者 csplit 只能以其调用文件的传统方式使用吗?即csplit -f split_name file_to_split.txt /split/ {*}
与[series of commands] | csplit -f split_name /split/ {*}
感谢您提供任何建议或完成类似任务的替代方案。
答案1
正如迈克尔·霍默所说,任何符合 POSIX 标准的 csplit 都可以获取超过 99 个文件,但您必须传递该-n
选项。
csplit -n 3 file_to_split.txt
话虽这么说,如果您有一个任务可以使用 GNU 版本的 csplit 轻松完成,但不能使用 FreeBSD/OSX 版本完成,那么您可以安装 GNU 版本(GNU coreutils 的一部分)。 GNU coreutils 可以通过多种来源安装,我认为最流行的是自制的。也可以看看如何用 GNU 核心实用程序替换 Mac OS X 实用程序?。
或者,csplit 所做的大部分工作都可以在几行 awk 中实现,这为您在输出文件名等方面提供了更大的灵活性。以下代码片段从标准输入读取并将行写入part-000.txt
、part-001.txt
等,每次行包含 时都会更改文件header-line
。
awk '
/header-line/ {
++part;
if (output_file) close(output_file);
output_file=sprintf("part-%03d.txt", part)
}
{print >output_file}
'