我有一个 ~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>'),
您应该使用支持 XML 解析的语言或程序。您可以在以下列表中选择其中之一:
Perl,Python,Ruby,PHP-cli(例如SimpleXMLElement和Xpath),xmllint等
应避免使用正则表达式来执行该任务。
下面是一个将 php shell 脚本与 Xpath 查询一起使用的示例 https://stackoverflow.com/a/20940216/2900196:
您可以编写一个小的 XSLT 脚本来拆分文件。
使用模板、for-each 循环和结果文档就足够了。
使用 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>'),
至少在Mac上,您只需使用split命令即可拆分文件:
split -p "</record>')," file bib_snippet_
模式的 -p 参数
更新:由于您需要文件以"..记录..."您需要在此方法中自己手动添加以下内容:
for f in `ls bib_snippet_*` ; do cat "</record>')," >> $f ; done