XMLデータをCSVに

XMLデータをCSVに

希望の結果が得られないため、迅速な支援が必要です。

2020-05-19 19:03:07,135 INFO [Container : 8504] [HttpUtil.java]requestXML: <?xml version="1.0"? ><COMMAND><TYPE>RCTRFREQ</TYPE><DN1>99847</DN1><AMOUNT>49</AMOUNT></COMMAND> - 
2020-05-19 19:05:07,135 INFO [Container : 8504] [HttpUtil.java]requestXML: <?xml version="1.0"? ><COMMAND><PE>RC</PE><DN1>92847</DN1><AMOUNT>19</AMOUNT></COMMAND> - 
2020-05-19 19:05:07,135 INFO [Container : 8504] [HttpUtil.java]requestXML: <?xml version="1.0"? ><COMMAND><DN1>947</DN1><TYPE>RC</TYPE><AMOUNT>29</AMOUNT></COMMAND> - 

希望の出力:

Time,DN1,AMOUNT
2020-05-19 19:03:07,99847,49
2020-05-19 19:05:07,92847,19
2020-05-19 19:05:07,947,29 

ベストアンサー1

$ awk '
    BEGIN { FS=",|</?(DN1|AMOUNT)>"; OFS=","; print "Time", "DN1", "AMOUNT" }
    { print $1, $3, $(NF-1) }
' file
Time,DN1,AMOUNT
2020-05-19 19:03:07,99847,49
2020-05-19 19:05:07,92847,19
2020-05-19 19:05:07,947,29

FS上記のコードは、入力を(たとえば,、、、、<DN1>および</DN1><AMOUNT>に格納されている正規表現と一致する文字列で区切られたフィールドに分割し、最後の最初</AMOUNT>、3番目、および2番目のフィールドを印刷するようにawkに指示します。

上記が各レコードをフィールドに分割する方法は次のとおりです。

$ awk -F',|</?(DN1|AMOUNT)>' '{print "----" ORS $0; for (i=1;i<=NF;i++) print NR, i "/" NF, $i}' file
----
2020-05-19 19:03:07,135 INFO [Container : 8504] [HttpUtil.java]requestXML: <?xml version="1.0"? ><COMMAND><TYPE>RCTRFREQ</TYPE><DN1>99847</DN1><AMOUNT>49</AMOUNT></COMMAND> -
1 1/6 2020-05-19 19:03:07
1 2/6 135 INFO [Container : 8504] [HttpUtil.java]requestXML: <?xml version="1.0"? ><COMMAND><TYPE>RCTRFREQ</TYPE>
1 3/6 99847
1 4/6
1 5/6 49
1 6/6 </COMMAND> -
----
2020-05-19 19:05:07,135 INFO [Container : 8504] [HttpUtil.java]requestXML: <?xml version="1.0"? ><COMMAND><PE>RC</PE><DN1>92847</DN1><AMOUNT>19</AMOUNT></COMMAND> -
2 1/6 2020-05-19 19:05:07
2 2/6 135 INFO [Container : 8504] [HttpUtil.java]requestXML: <?xml version="1.0"? ><COMMAND><PE>RC</PE>
2 3/6 92847
2 4/6
2 5/6 19
2 6/6 </COMMAND> -
----
2020-05-19 19:05:07,135 INFO [Container : 8504] [HttpUtil.java]requestXML: <?xml version="1.0"? ><COMMAND><DN1>947</DN1><TYPE>RC</TYPE><AMOUNT>29</AMOUNT></COMMAND> -
3 1/6 2020-05-19 19:05:07
3 2/6 135 INFO [Container : 8504] [HttpUtil.java]requestXML: <?xml version="1.0"? ><COMMAND>
3 3/6 947
3 4/6 <TYPE>RC</TYPE>
3 5/6 29
3 6/6 </COMMAND> -

おすすめ記事