use*_*905 7 xml unix shell aix awk
我有一个像下面的xml
<root>
<FIToFICstmrDrctDbt>
<GrpHdr>
<MsgId>A</MsgId>
<CreDtTm>2001-12-17T09:30:47</CreDtTm>
<NbOfTxs>0</NbOfTxs>
<TtlIntrBkSttlmAmt Ccy="EUR">0.0</TtlIntrBkSttlmAmt>
<IntrBkSttlmDt>1967-08-13</IntrBkSttlmDt>
<SttlmInf>
<SttlmMtd>CLRG</SttlmMtd>
<ClrSys>
<Prtry>xx</Prtry>
</ClrSys>
</SttlmInf>
<InstgAgt>
<FinInstnId>
<BIC>AAAAAAAAAAA</BIC>
</FinInstnId>
</InstgAgt>
</GrpHdr>
</FIToFICstmrDrctDbt>
</root>
Run Code Online (Sandbox Code Playgroud)
我需要使用awk命令在单独的变量中提取每个标记值的值.怎么做?
dog*_*ane 17
您可以使用awk如下所示,但是,这不是一个强大的解决方案,如果xml格式不正确,将失败,例如,如果同一行上有多个元素.
$ dt=$(awk -F '[<>]' '/IntrBkSttlmDt/{print $3}' file)
$ echo $dt
1967-08-13
Run Code Online (Sandbox Code Playgroud)
我建议你使用一个合适的xml处理工具,比如xmllint.
$ dt=$(xmllint --shell file <<< "cat //IntrBkSttlmDt/text()" | grep -v "^/ >")
$ echo $dt
1967-08-13
Run Code Online (Sandbox Code Playgroud)
小智 5
以下 gawk 命令使用记录分隔符正则表达式模式来匹配 XML 标签。任何以 < 后跟至少一个非 > 并以 > 结尾的东西都被认为是一个标签。Gawk 将每个 RS 匹配分配到 RT 变量中。标签之间的任何内容都将被解析为 gawk 分配给 $0 的记录文本。
gawk 'BEGIN { RS="<[^>]+>" } { print RT, $0 }' myfile
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32938 次 |
| 最近记录: |