【问题标题】:Split file by XML tag按 XML 标记拆分文件
【发布时间】:2013-03-19 15:42:32
【问题描述】:

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

你好

一个例子

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

文件 1

这是

文件 3

    标签: xml unix tags split command


    【解决方案1】:

    在此处找到以下 PERL 程序:Split one file into multiple files based on delimiter

    #!/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);
    

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

    干杯。

    【讨论】:

      【解决方案2】:

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

      awk '{print $0 ""> "file" NR}' RS='' input-file
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 感谢您的提示。我一定会检查 XSLT V2.0。样式表。也只是作为参考,我同意你关于 awk 的看法(我得到的确切错误是:awk: cannot open "F1021" for output (Too many open files)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-12
        相关资源
        最近更新 更多