我有一个大约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>'),
答案 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