我正在寻找遍历与XML文件中的ID号匹配的ID号列表,并使用BASH(和AWK)将以下行打印到shell或将其重定向到第三个输出文件(output.txt)
这是细分:
ID_list.txt(此示例缩写-它具有100个ID)
4414
4561
2132
999
1231
34
489
3213
7941
XML_example.txt(数千个条目)
<book>
<ID>4414</ID>
<name>Name of first book</name>
</book>
<book>
<ID>4561</ID>
<name>Name of second book</name>
</book>
我希望脚本的输出是第一个文件中100个ID的名称:
Name of first book
Name of second book
etc
我相信可以使用带有for循环的BASH和AWK来做到这一点(对于文件1中的每个文件,在file2中找到对应的名称)。我认为您可以检索GREP以获取ID号,然后使用AWK打印它下面的行。即使输出看起来像这样,我也可以在之后删除XML标签:
<name>Name of first book</name>
<name>Name of second book</name>
它在Linux服务器上,但是我可以将其移植到Windows上的PowerShell。我认为BASH / GREP和AWK是必经之路。
有人可以帮我编写脚本吗?
这是一种方法:
while IFS= read -r id
do
grep -A1 "<ID>$id</ID>" XML_example.txt | grep "<name>"
done < ID_list.txt
这是另一种方式(单线)。这效率更高,因为它使用单个grep提取所有id,而不是循环:
egrep -A1 $(sed -e 's/^/<ID>/g' -e 's/$/<\/ID>/g' ID_list.txt | sed -e :a -e '$!N;s/\n/|/;ta' ) XML_example.txt | grep "<name>"
输出:
<name>Name of first book</name>
<name>Name of second book</name>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句