我有一个包含一百万个单独的xml文件(简单连接)的文件,我想将其转换为json。该文件如下所示:
<amf xmlns="...">
<test>
1 content
</test>
</amf>
<amf xmlns="...">
<test>
2 content
</test>
</amf>
请注意,上面的文件不是格式正确的xml文件(即各个条目没有嵌套),所以我无法使用`xml2json'进行转换。
为了实现这一点,我想将文件分成记录,以便每个记录对应于单个xml文件,将xml文件连接成一行,然后在应用{{1}的每一行上使用parallel
实现xml2json
输出。
当我尝试在OSX上使用json
或awk
时,我无法将管道拆分为记录。这是我尝试过的代码(“无用”cat是为了便于阅读):
gawk
给出了:
cat bigfile.xml | awk '{print NR "<amf xml"$0}' RS="<amf xml"
删除第一个'记录'很容易,但我不能将其他记录的输出折叠为每个记录的一行。我试着尝试FS =“\ n”和OFS =“”没有太多运气。
你能帮助我在每条记录的一行输出这些记录吗?
答案 0 :(得分:1)
添加$1=$1
似乎解决了我的问题:
awk '{$1=$1; print NR "<amf xml"$0}' RS="<amf xml" bigfile.xml
我仍然需要手动摆脱第一行,但这似乎没问题。
1<amf xml
2<amf xmlns="..."> <test> 1 content </test> </amf>
3<amf xmlns="..."> <test> 2 content </test> </amf>
答案 1 :(得分:1)
使用GNU awk进行多字符RS和RT:
$ awk -v RS='</amf>\n' '{$1=$1; ORS=RT}1' file
<amf xmlns="..."> <test> 1 content </test></amf>
<amf xmlns="..."> <test> 2 content </test></amf>
答案 2 :(得分:0)
试试这个......
$ awk -v RS='<amf xml' 'NF{$1=$1; print RS $0}' file