我想用grep等通过在awk或sed的XML文件显示数据之间的grep的数据,而是陷入了僵局......在awk或桑达:XML多线
在细节我在寻找如何做(1)从'mt'标签获得值,(2)仅分析包含'Source = _SYSTEM'的所有'moid'标签,(3)获得'Host ='的值,并且在下一行中获得'r '标签,(4)然后打印来自'mt'标签的值,(5)然后打印'Host ='的值和'r'标签的打印值,(6)总和来自所有'Host ='的值并打印它;
这里的问题是,我在XML中有许多标签和许多行。
这里是我的XML解析,
<?xml version="1.0"?>
<neid>
<neun></neun>
<nedn>element=home</nedn>
</neid>
<mi>
<mts>20150517032500.0+0200</mts>
<gp>300</gp>
<mt>Name1</mt>
<mv>
<moid>Host=super1.stackoverflow.com, Source = Source1</moid>
<r>1</r>
</mv>
<mv>
<moid>Host=super2.stackoverflow.com, Source = Source2</moid>
<r>1</r>
</mv>
<mv>
<moid>Host=super2.stackoverflow.com, Source = _SYSTEM</moid>
<r>2</r>
</mv>
<mv>
<moid>Host=super2.stackoverflow.com, Source = Source3</moid>
<r>1</r>
</mv>
<mv>
<moid>Host=super1.stackoverflow.com, Source = _SYSTEM</moid>
<r>2</r>
</mv>
<mv>
<moid>Host=super1.stackoverflow.com, Source = Source4</moid>
<r>1</r>
</mv>
</mi>
<mi>
<mts>20150517032500.0+0200</mts>
<gp>300</gp>
<mt>Name2</mt>
<mv>
<moid>Host=super1.stackoverflow.com, Source = Source1</moid>
<r>11</r>
</mv>
<mv>
<moid>Host=super2.stackoverflow.com, Source = Source2</moid>
<r>11</r>
</mv>
<mv>
<moid>Host=super2.stackoverflow.com, Source = _SYSTEM</moid>
<r>22</r>
</mv>
<mv>
<moid>Host=super2.stackoverflow.com, Source = Source3</moid>
<r>11</r>
</mv>
<mv>
<moid>Host=super1.stackoverflow.com, Source = _SYSTEM</moid>
<r>22</r>
</mv>
<mv>
<moid>Host=super1.stackoverflow.com, Source = Source4</moid>
<r>11</r>
</mv>
</mi>
预期结果,
Name1:
super1.stackoverflow.com: 2
super2.stackoverflow.com: 2
TOTAL: 4
Name2:
super1.stackoverflow.com: 22
super2.stackoverflow.com: 22
TOTAL: 44
UPD:我的要求是用awk或sed的,因为不幸的是这是不可能的(禁止在主机上安装它)使用xmllint或xmlstarlet或类似的东西。
非常感谢您提前!
考虑使用一个标准的XML处理技术(XSLT,expat库等) – amdixon
这对[xmllint(HTTP工作://计算器.com/tags/xmllint/info)或[xmlstarlet](http://stackoverflow.com/tags/xmlstarlet/info)或类似的东西。 – Cyrus
这看起来不像有效的XML,有两个根节点。 – Wintermute