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

답변2

XML을 구문 분석하는 데 정규식을 사용하지 마세요. 그것은 광기입니다. 하지만 당신이 계속해서 광기와 조랑말 속으로 빠져들고자 한다면:

sed -En '/TxnTm=/{s/^.*TxnTm="//;s/T[0-9:]+".*$//;p;q;}' < inputfile

답변3

더 쉬운 옵션은 그냥 사용하는 것입니다 grep. 하지만 XML이나 XHTML을 구문 분석하기 위해 정규식 도구를 사용하라는 제안은 슬픔의 도시로 가는 편도 티켓입니다.

$ grep -m1 -oE '"[0-9]{4}-[0-9]{2}-[0-9]{2}"' input
"2019-03-27"

관련 정보