我想将 .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/ {*}
感谢您提供任何建议或完成类似任务的替代方法。
正如 Michael Homer 所说,任何符合 POSIX 的 csplit 都可以包含 99 个以上的文件,但您必须通过该-n
选项。
csplit -n 3 file_to_split.txt
Run Code Online (Sandbox Code Playgroud)
话虽如此,如果您的任务可以使用 GNU 版本的 csplit 轻松完成,但无法使用 FreeBSD/OSX 版本轻松完成,您可以安装 GNU 版本(GNU coreutils 的一部分)。GNU coreutils 可以通过几个来源安装,我认为最受欢迎的是homebrew。另请参阅如何用 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=snprintf("part-%03d.txt", part)
}
{print >file}
'
Run Code Online (Sandbox Code Playgroud)