我將不勝感激這個腳本任務的任何幫助。bash,awk,sed刪除帶有重複ID的XML塊,保持最新狀態,保持原始順序
我需要刪除每個塊的非唯一ID,除了有一個最新的日期。如果日期相同,則文件內的最後一項應該取勝並保持未刪除。
必須保留輸入的原始排序順序。
輸入:
<DATA>
<TABLES>
<BLOCK>
<ID V="333"/>
<TEXT/>
<TEXT/>
<DATE V="20160101 00:00:00"/>
<TEXT/>
</BLOCK>
<BLOCK>
<TEXT/>
<TEXT/>
<ID V="4444"/>
<DATE V="20140101 00:00:00"/>
<TEXT/>
<TEXT/>
</BLOCK>
<BLOCK>
<ID V="333"/>
<DATE V="20100101 00:00:00"/>
<TEXT/>
</BLOCK>
<BLOCK>
<TEXT/>
<ID V="4444"/>
<TEXT/>
<TEXT/>
<DATE V="20160101 00:00:00"/>
<TEXT/>
</BLOCK>
<BLOCK>
<TEXT/>
<ID V="7777777"/>
<TEXT/>
<TEXT/>
<DATE V="20130101 00:00:00"/>
<TEXT/>
</BLOCK>
<BLOCK>
<ID V="333"/>
<DATE V="20120101 00:00:00"/>
<TEXT/>
</BLOCK>
<BLOCK>
<TEXT/>
<TEXT/>
<ID V="22"/>
<TEXT/>
<DATE V="20151231 00:00:00"/>
</BLOCK>
<BLOCK>
<TEXT/>
<ID V="7777777"/>
<TEXT/>
<TEXT/>
<DATE V="20130101 00:00:00"/>
<TEXT/>
</BLOCK>
<BLOCK>
<TEXT/>
<ID V="22"/>
<TEXT/>
<TEXT/>
<DATE V="20130101 00:00:00"/>
<TEXT/>
</BLOCK>
</TABLES>
</DATA>
預期輸出:
<DATA>
<TABLES>
<BLOCK>
<ID V="333"/>
<TEXT/>
<TEXT/>
<DATE V="20160101 00:00:00"/>
<TEXT/>
</BLOCK>
<BLOCK>
<TEXT/>
<ID V="4444"/>
<TEXT/>
<TEXT/>
<DATE V="20160101 00:00:00"/>
<TEXT/>
</BLOCK>
<BLOCK>
<TEXT/>
<TEXT/>
<ID V="22"/>
<TEXT/>
<DATE V="20151231 00:00:00"/>
</BLOCK>
<BLOCK>
<TEXT/>
<ID V="7777777"/>
<TEXT/>
<TEXT/>
<DATE V="20130101 00:00:00"/>
<TEXT/>
</BLOCK>
</TABLES>
</DATA>
聽起來像是你需要一個實際的XML解析器,而不是一些黑客使用awk和sed。 –
「請寫一個腳本,爲我做X」不是一個合適的StackOverflow問題;我們在這裏建立一個技術問答知識庫,而不是爲他們編寫人們的腳本。 (另外,bash不是這份工作的精選語言 - 你可以更容易地使用Python)。 –
(順便說一句,根據這個標準選擇要刪除的項目對於XPath 2.0來說是一件很容易的事情;儘管如此,這與基於libxml的命令行工具(如xmlstarlet,xsltproc和c。支持) 。 –