我试图实现的一些背景。解析xml并将数据提取到表格中的最有效方法
目前在一个锁定的HPUX盒子上,用bash和perl来处理,但是我没有perl的经验。
输入是按以下格式十六进制和XML(0到n)转储:
MQGET of message number 1
Message Descriptor
Various Config/Params
Various Config/Params
Various Config/Params
Message
length - 3631 bytes
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<config params>'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<config params>'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<config params>'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<config params>'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<config params>'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<config params>'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<config params>'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<config params>'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<config params>'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<soapenv:Envelop'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 'e xmlns:soapenv='
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '"http://schemas.'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<useful_xml_data'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<useful_xml_data'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<useful_xml_data'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<useful_xml_data'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<useful_xml_data'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<useful_xml_data'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<useful_xml_data'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<useful_xml_data'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 '<xml_data_closin'
00000000: 3453 5675 2346 2345 2346 8679 3452 7554 'g_tag> '
我想与下面的输出落得:
1 <useful_xml_data> <specific_value> <specific_xml>
2 <useful_xml_data> <specific_value> <specific_xml>
n <useful_xml_data> <specific_value> <specific_xml>
我的做法在时刻如下:
untouchable_script_sdout | sed -n "/^[0000]/p" | cut -c59-74 | tr -d '\n'
这会除去xml以外的所有内容,并删除所有换行符。
然后我通过一个类似于这个post的xml解析脚本来传递它,当实体等于xml结束标记时,它将在\ n中添加。
这给我留下了以下内容:
<msg1_open_tag>
<xml_tag>value
</xmltag>
<xml_tag>value
</xmltag>
....
</close_tag>
<msgn_open_tag>
<xml_tag>value
</xmltag>
<xml_tag>value
</xmltag>
</close_tag>
....
,这意味着我可以提取我想用grep/awk中的数据,但我挣扎对齐数据(一些消息可能有NULL值)。
在我脑海中的下一个步骤将是让每一个消息行中的xml:
<msg1_open_tag> <xml_tag>value </xmltag> <xml_tag>value </xmltag> </close_tag>
<msgn_open_tag> <xml_tag>value </xmltag> <xml_tag>value </xmltag> </close_tag>
循环尽管这些处理,并根据需要得到一个表的打印。
但是我很努力地把每条消息都放到一行上。正如你毫无疑问地告诉我,我远离bash专家,我只是随心所欲地采摘它。
任何意见或最佳实践指针将不胜感激。
感谢您的sed更正! 不幸的是,我不能让sed命令像上面描述的那样工作,设法找出一个替代方案。无论如何,谢谢你的回应,让我们深入了解sed。 – dirtyscript