将一个文本文件分割成多个文件,超出csplit的{99}限制

将一个文本文件分割成多个文件,超出csplit的{99}限制

我想将 .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.txtpart-001.txt等,每次行包含 时都会更改文件header-line

awk '
    /header-line/ {
        ++part;
        if (output_file) close(output_file);
        output_file=sprintf("part-%03d.txt", part)
    }
    {print >output_file}
'

相关内容