2014-02-10 48 views
2

後,我有我想將它拆分成1000個記錄塊一個XML文件,該文件〜1GB大,與拆分XML文件轉換成塊標記

grep -c "</record>')," file 
238613 

,但每個文件需要與

結束
</record>'), 

然後我會得到238個文件。

這是與前兩個記錄的實際文件:

\set bib_tag '''IMPORT CONCERTO''' 
INSERT INTO marcxml_import (tag, marc) VALUES 
(:bib_tag,'<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
<datafield and subfield data> 
</record>'), 
(:bib_tag,'<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
<datafield and subfield data> 
</record>'), 
+0

更好地使用Python – MLSC

+0

請張貼樣本的數據。如果它很敏感,那麼補充一些東西。 –

+0

dive in(http://docs.python.org/3/library/xml.etree.elementtree.html) – MLSC

回答

0

您應該使用支持XML解析語言或程序。你可以選擇在此以下列表中其中的一個:

的Perl,Python和Ruby,PHP-CLI(帶的SimpleXMLElement和XPath爲例),xmllint等

應避免正則表達式來做到這一點的任務。

下面是一個使用PHP shell腳本XPath查詢的例子:https://stackoverflow.com/a/20940216/2900196

0

你可以寫一個小XSLT腳本來分割文件。

使用模板,for-each循環和結果文檔應該足夠了。

0

使用了GNU AWK

awk '{print $0 RS >NR ".xml"}' RS="</record>')," file 

運行後,你應該得到一些XML(或幾百)

cat 1.xml 

set bib_tag '''IMPORT CONCERTO''' 
INSERT INTO marcxml_import (tag, marc) VALUES 
(:bib_tag,'<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
<datafield and subfield data> 
</record>'), 
+0

在Macintosh上不起作用......尷尬! – Anno2001

+0

你可以在Mac中安裝GNU awk。 – BMW

0

至少在Mac上,你可以分割的文件簡單地分割命令:

split -p "</record>')," file bib_snippet_ 

-p參數模式

更新:因爲你所需要的文件,以結束「..record ......」你需要在這個方法來手動添加此自己:

for f in `ls bib_snippet_*` ; do cat "</record>')," >> $f ; done