拆分大型文本文件

拆分大型文本文件

我有一个大型文本文件,其中包含单独的标题,我需要将其拆分为单独的文件。

例如,该文件有如下标题:

--Heading 1--
some text
text

--Heading 2--
more text etc

--Heading 3--
asdf text

我需要根据文件头将大文件拆分为文本文件。

因此对于该示例,将会有 3 个文件输出。

标题1.txt:

--Heading 1--
some text
text

标题2.txt:

--Heading 2--
more text etc

标题3.txt:

--Heading 3--
asdf text

有谁知道可以做到这一点的 Windows 或 Max 应用程序/脚本?

或者也许给出如何用编程语言编写类似内容的说明。我不知道 Python 或 Java,但也许这是学习的时候了。:)

谢谢!

答案1

这不是最简单的答案,希望有人能想出更简洁的答案。我编写了一个可以在 Mac 上运行的小脚本。

#!/bin/bash
NUMFILES=`grep '^--.*--' $1 | wc -l`
NUMFILES=$(($NUMFILES - 2))
csplit -k $1 '%^--.*--$%' '/^--.*--$/' "{$NUMFILES}" 
for file in `ls xx*`
do
        mv $file "`head -n1 $file | sed -e 's/--\(.*\)--/\1.txt/'`"
done

这可以用于csplit分割文件。第四行基本上表示忽略第一个标题行之前的所有内容,然后分割其后的标题。第 2-3 行计算出 csplit 需要分割文件的次数。

csplit将其输出文件命名为 xx,后跟 2 位数字。最后 4 行将所有这些文件重命名为标题行中的内容,并删除--

答案2

这是“一行” 8-]。它与 Martin 的类似。这将在您的 Mac 上运行。只需打开“终端”应用程序并导航到包含以下内容的目录:myfile.txt

split -p '--.*--' myfile.txt FILE && for file in FILE*; do mv $file "$(head -1 $file | sed 's/--//g')".txt; done

PS. 确保目录中没有名为 FILE* 的文件。即确保ls FILE*不显示任何内容。

相关内容