AWKを使用したXMLの解析

AWKを使用したXMLの解析

以下に示す文字列には、ANSI形式の日付(YYYY-MM-DD)の最初のインスタンスのみが必要です。

PosMntReq ReqId="XXXXX" TxnTyp="4" Actn="1" BizDt="2019-03-27" TxnTm="2019-03-27T10:41:13" AdjTyp="3" SetSesID="EOD">

awk を使用して作成したコマンドに日付は指定されません。

v_business_date=$(awk -F= 'NR==4 { print $5}' XMLCD02)

bash-4.2$ echo $v_business_date
"2019-03-27" TxnTm

日付のある行がファイルに複数回表示されます。その行の最初の項目が必要です。

ベストアンサー1

データについていくつかの仮定をしましょう。

$ cat file.xml
<root>
  <node1>
    <node2 ReqId="XXXXX" TxnTyp="4" Actn="1" BizDt="2019-03-27" TxnTm="2019-03-27T10:41:13" AdjTyp="3" SetSesID="EOD"> 
    </node2>
  </node1>
</root>

$ txn_tm=$( xmlstarlet sel -t -v '//node2/@TxnTm' file.xml )

$ echo "$txn_tm"
2019-03-27T10:41:13

ReqIdに基づいてノードを選択するには、xpathを調整する必要があります。指定された「ReqId」属性を持つすべてのノードの「TxnTm」属性値を返します。

xmlstarlet sel -t -v '//*[@ReqId = "XXXXX"]/@TxnTm' -n file.xml

おすすめ記事