Shell 如何在Unix中搜索XML文件的标记值?

Shell 如何在Unix中搜索XML文件的标记值?,shell,unix,xml-parsing,Shell,Unix,Xml Parsing,我有一个如下所示的xml <productCode> <codingScheme>BDR</codingScheme> </productCode> <productCode> <codingScheme>CNY</codingScheme> </productCode> ... <riskCategoryCode> <codingScheme>BDR&

我有一个如下所示的xml

<productCode>
    <codingScheme>BDR</codingScheme>
</productCode>
<productCode>
    <codingScheme>CNY</codingScheme>
</productCode>
...
<riskCategoryCode>
    <codingScheme>BDR</codingScheme>
</riskCategoryCode>
<riskCategoryCode>
    <codingScheme>NCP</codingScheme>
</riskCategoryCode>
...
但它计算productCode和codingScheme的总发生次数,例如productCode 10次,codingScheme 20次,然后返回30次,这不是必需的

awk '{if($0~/\<codingScheme\>BDR\<\/codingScheme\>/){if(x~/productCode/)count++};x=$0}END{print count}' your_file
测试:

> cat temp
<productCode>
<codingScheme>BDR</codingScheme>
</productCode>
<productCode>
<codingScheme>CNY</codingScheme>
</productCode>
<productCode>
<codingScheme>BDR</codingScheme>
</productCode>
......
<riskCategoryCode>
<codingScheme>BDR</codingScheme>
</riskCategoryCode>
<riskCategoryCode>
<codingScheme>NCP</codingScheme>
</riskCategoryCode>
> awk '{if($0~/\<codingScheme\>BDR\<\/codingScheme\>/){if(x~/productCode/)count++};x=$0}END{print count}' temp
2
>
> cat temp
<productCode>
<codingScheme>BDR</codingScheme>
</productCode>
<productCode>
<codingScheme>CNY</codingScheme>
</productCode>
<productCode>
<codingScheme>BDR</codingScheme>
</productCode>
......
<riskCategoryCode>
<codingScheme>BDR</codingScheme>
</riskCategoryCode>
<riskCategoryCode>
<codingScheme>NCP</codingScheme>
</riskCategoryCode>
> awk '{if($0~/\<codingScheme\>BDR\<\/codingScheme\>/){if(x~/productCode/)count++};x=$0}END{print count}' temp
2
>