标记后将XML文件拆分为块

时间:2014-02-10 20:07:45

标签: xml bash sed

我有一个大约1GB的XML文件,带

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

我想将其拆分为1000条记录,但每个文件都需要以

结尾
</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>'),

4 个答案:

答案 0 :(得分:0)

您应该使用支持XML解析的语言或程序。您可以在以下列表中选择其中一个:

Perl,Python,Ruby,PHP-cli(例如,使用SimpleXMLElement和Xpath),xmllint等

你应该避免使用正则表达式来完成这项任务。

以下是使用带有Xpath查询的php shell脚本的示例:https://stackoverflow.com/a/20940216/2900196

答案 1 :(得分:0)

您可以编写一个小的XSLT脚本来拆分文件。

使用模板,for-each循环和结果文档就足够了。

答案 2 :(得分: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>'),

答案 3 :(得分:0)

至少在Mac上,你可以使用split命令分割文件:

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

模式

的-p参数

更新:由于您要求文件以“..record ...”结尾,您需要自己手动添加此方法:

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