1

我有一个非常大的 xml 文件(1.25 GB),我需要将其拆分为较小的文件才能处理它们。该文件包含以标签开头和结尾的语言数据:

< 文本 id="www.example.com>

</文>

我想用这些标签分割较大的文件。因此,例如,

< 文本 id="www.example.com>

你好

</文>

< 文本 id="www.example.com>

这是

</文>

< 文本 id="www.example.com>

一个例子

</文>

本质上是三个不同的文件:开始和结束由“文本”标签标记。例如:

文件 1

< 文本 id="www.example.com>

你好

</文>

文件 2

< 文本 id="www.example.com>

这是

</文>

文件 3

< 文本 id="www.example.com>

一个例子

</文>

例如,我想这可以通过在 Perl 中编写脚本来完成,但我想知道是否有任何一种“一站式”方式来使用 unix 分割这个文件。

我知道拆分命令对于根据行或文件大小将大文件拆分为较小的文件很有用。但是,是否有类似的命令允许通过 xml 标签进行拆分?

提前感谢您的帮助!

4

3 回答 3

2

在此处找到以下 PERL 程序:根据分隔符将一个文件拆分为多个文件

#!/usr/bin/perl
open(FI,"file.txt") or die;
$cur=0;
open(FO,">res.$cur.txt") or die;
while(<FI>)
{
    print FO $_;
    if(/^<\/text>/) # Added \
    {
        close(FO);
        $cur++;
        open(FO,">res.$cur.txt") or die;
    }
}
close(FO);

似乎也可以解决问题,没有最大上限。

干杯。

于 2013-03-19T17:07:38.223 回答
1

以下 awk 解决了这个问题,但不幸的是,输出文件限制在 1000 个左右

awk '{print $0 ""> "file" NR}' RS='' input-file
于 2013-03-19T17:04:37.740 回答
1

它比一个简单的 awk 命令复杂得多,而且我不知道文件是否很大,但是您可以尝试使用 XSLT V2.0 样式表result-document来生成所有文件。

与正则表达式相比,使用 XSLT 的一个优点是,如果文件格式稍有变化,或者如果您想要拆分的节点上有属性,它将有更好的支持。

于 2013-03-19T17:09:35.663 回答