按XML标记拆分文件

时间:2013-03-19 15:42:33

标签: xml unix tags split command

我有一个非常大的xml文件(1.25 GB),我需要拆分成较小的文件才能处理它们。该文件包含由标签支持的语言数据:

  

< text id =“www.example.com>

  

< /文字和GT;

我想通过这些标签拆分较大的文件。所以,例如,

  

< text id =“www.example.com>

     

您好

     

< /文字和GT;

     

< text id =“www.example.com>

     

这是

     

< /文字和GT;

     

< text id =“www.example.com>

     

示例

     

< /文字和GT;

基本上是三个不同的文件:开头和结尾用“text”标签标记。 例如:

文件1

  

< text id =“www.example.com>

     

您好

     

< /文字和GT;

文件2

  

< text id =“www.example.com>

     

这是

     

< /文字和GT;

文件3

  

< text id =“www.example.com>

     

示例

     

< /文字和GT;

我想这可以通过Perl中的脚本来完成,但是我想知道是否有任何一种“一站式”方法来使用unix拆分此文件。

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

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

以下awk解决了这个问题,但遗憾的是大约有1000个输出文件

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

答案 1 :(得分: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 :(得分:1)

它比简单的awk命令要复杂得多,如果文件大或不大,我就不会这样做,但你可以尝试使用带有result-document的XSLT V2.0样式表来生成所有文件你的文件。

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