我需要按名稱而不是位置對 XML 標記值進行排序,因為 xml 標記是動態的,即標記的數量不是固定的。到目前為止,我已經嘗試了下面的代碼,但它沒有給出預期的輸出。
$ sed -e 's/<timestamp>/& /' file | sort -n -k2 | sed 's/ //g'
XML 記錄:-
<data1><Version>101</Version><timestamp>2022-11-01T05:51:33.540</timestamp><newtag>xlc<newtag><name>XXX</name></data1>
<data1><Version>102</Version><timestamp>2022-11-01T05:49:32.511</timestamp><newtag>xlc<newtag><name>BBB</name></data1>
<data1><Version>101</Version><timestamp>2022-11-01T05:54:30.540</timestamp><name>AAA</name></data1>
<data2><Version>102</Version><timestamp>2022-11-01T05:50:33.540</timestamp><newtag>xlc<newtag><name>XXX</name></data2>
<data2><Version>101</Version><timestamp>2022-11-01T05:41:33.540</timestamp><name>YYY</name></data2>
<data2><Version>102</Version><newtag>xlc<newtag><timestamp>2022-11-01T05:50:12.510</timestamp><name>BBB</name></data2>
預期輸出:-
<data2><Version>101</Version><timestamp>2022-11-01T05:41:33.540</timestamp><name>YYY</name></data2>
<data1><Version>102</Version><timestamp>2022-11-01T05:49:32.511</timestamp><newtag>xlc<newtag><name>BBB</name></data1>
<data2><Version>102</Version><newtag>xlc<newtag><timestamp>2022-11-01T05:50:12.510</timestamp><name>BBB</name></data2>
<data2><Version>102</Version><timestamp>2022-11-01T05:50:33.540</timestamp><newtag>xlc<newtag><name>XXX</name></data2>
<data1><Version>101</Version><timestamp>2022-11-01T05:51:33.540</timestamp><newtag>xlc<newtag><name>XXX</name></data1>
<data1><Version>101</Version><timestamp>2022-11-01T05:54:30.540</timestamp><name>AAA</name></data1>
uj5u.com熱心網友回復:
使用awk在 處拆分欄位<[/]?timestamp>,以時間戳為鍵填充陣列,然后對其進行排序。這假設記錄在一行中。
gawk 'BEGIN{FS="<[/]?timestamp>"}{ts[$2]=$1 "<timestamp>" $2 "</timestamp>" $3}END{ n=asorti(ts,kts); for (i=1;i<=n;i ){ print ts[kts[i]]}}' tmp.xml
結果
<data2><Version>101</Version><timestamp>2022-11-01T05:41:33.540</timestamp><name>YYY</name></data2>
<data1><Version>102</Version><timestamp>2022-11-01T05:49:32.511</timestamp><newtag>xlc<newtag><name>BBB</name></data1>
<data2><Version>102</Version><newtag>xlc<newtag><timestamp>2022-11-01T05:50:12.510</timestamp><name>BBB</name></data2>
<data2><Version>102</Version><timestamp>2022-11-01T05:50:33.540</timestamp><newtag>xlc<newtag><name>XXX</name></data2>
<data1><Version>101</Version><timestamp>2022-11-01T05:51:33.540</timestamp><newtag>xlc<newtag><name>XXX</name></data1>
<data1><Version>101</Version><timestamp>2022-11-01T05:54:30.540</timestamp><name>AAA</name></data1>
uj5u.com熱心網友回復:
如果您-n從排序中洗掉開關,您的代碼將正常作業:
sed -e 's/<timestamp>/& /' file | sort -k2 | sed 's/ //g'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/526441.html
標籤:xml重击壳
