我試圖實現的一些背景。解析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