2013-03-19 48 views
1

我有一個非常大的XML文件(1.25 GB),我需要分割成更小的文件才能夠處理它們。該文件包含由標籤爲首,左右開弓語言數據:通過XML標記拆分文件

<文章ID =「www.example.com>

< /文本>

我想用這些標籤將較大的文件分隔,例如,

<文本ID = 「www.example.com>

你好

< /文本>

<文本ID =」 www.example.com>

這是

< /文本>

<文本ID =「www.example.com>

爲例

< /文本>

將基本上三個不同的文件:與由「文本」標記標記的開始和結束。 例如:

文件1

<文本ID =「www.example.com>

你好

< /文本>

文件2

< text id =「www.example。COM>

這是

< /文本>

文件3

<文本ID =「www.example.com>

示例

< /文本>

我想這可以通過在Perl腳本來完成,例如,但我不知道是否有任何形式的「一站式」的方式使用拆分此文件UNIX。

我知道拆分命令對於根據行或文件大小將大文件拆分爲更小的文件很有用。但是,是否有類似的命令允許通過xml標籤進行分割?

在此先感謝您的幫助!

回答

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); 

而且似乎做訣竅,沒有最大上限。

乾杯。

1

下awk的解決了這個問題,但不幸的是在1000左右的輸出文件

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

它比一個簡單的awk命令複雜得多,我不這樣做,如果文件會變大或不變,但您可以嘗試使用帶有result-document的XSLT V2.0樣式表來生成所有文件。

在正則表達式上使用XSLT的一個優點是,如果文件格式稍微改變或者想要分割的節點上有屬性,它將會有更好的支持。

+0

感謝您的提示。我一定會檢查出XSLT V2.0。樣式表。也僅僅作爲一個參考點,我同意你關於awk(我得到的確切錯誤是:awk:無法打開「F1021」輸出(打開的文件過多) – owwoow14 2013-03-19 17:20:33