我有一个标题XML节点,如<Fund
和页脚节点</Fund>
,所以我写了这样的内容来检索与此ID相关联的消息
每个XML都有一个id“33969871”(参见下面的脚本)
如果我提供ID并运行它(bash),它应该找到ID并遍历到消息的顶部(i,e - <Fund
然后到消息的底部(即{{ 1}})输出应该是XML
输入文件
</Fund>
我的awk命令
<Fund LastUpdate="2017-05-23T10:32:53.563000000">
<ID>13779321</ID>
</Fund>
<Fund LastUpdate="2017-05-23T10:32:53.563000000">
<ID>13779322</ID>
</Fund>
<Fund LastUpdate="2017-05-23T10:32:53.563000000">
<ID>13779323</ID>
</Fund>
但我没有得到结果。
答案 0 :(得分:1)
您可以使用xpath
xpath -q -e '//Fund/ID[text()='13779321']/..' test.xml
打印
<Fund LastUpdate="2017-05-23T10:32:53.563000000">
<ID>13779321</ID>
</Fund>
的
<root>
<Fund LastUpdate="2017-05-23T10:32:53.563000000">
<ID>13779321</ID>
</Fund>
<Fund LastUpdate="2017-05-23T10:32:53.563000000">
<ID>13779322</ID>
</Fund>
<Fund LastUpdate="2017-05-23T10:32:53.563000000">
<ID>13779323</ID>
</Fund>
</root>
答案 1 :(得分:0)
您可以使用单个grep语句执行此操作:
ABC_866.xml:
<Fund LastUpdate="2017-05-23T10:32:53.563000000">
<ID>13779321</ID>
</Fund>
<Fund LastUpdate="2017-05-23T10:32:53.563000000">
<ID>13779322</ID>
</Fund>
<Fund LastUpdate="2017-05-23T10:32:53.563000000">
<ID>13779323</ID>
</Fund>
Grep命令和输出:
# grep -B 1 -A 1 13779322 ABC_866.xml
<Fund LastUpdate="2017-05-23T10:32:53.563000000">
<ID>13779322</ID>
</Fund>
解释命令:
-B:匹配行
之前的行-A:匹配行后的行
答案 2 :(得分:0)
使用gawk
的多字符RS支持,并假设文件的格式如图所示。
$ awk -v RS='</Fund>' '/13779321/{print $0 RT}' file
<Fund LastUpdate="2017-05-23T10:32:53.563000000">
<ID>13779321</ID>
</Fund>