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

时间:2013-02-21 10:27:16

标签: shell unix xml-parsing

我有一个像下面的xml

<productCode>
    <codingScheme>BDR</codingScheme>
</productCode>
<productCode>
    <codingScheme>CNY</codingScheme>
</productCode>
...
<riskCategoryCode>
    <codingScheme>BDR</codingScheme>
</riskCategoryCode>
<riskCategoryCode>
    <codingScheme>NCP</codingScheme>
</riskCategoryCode>
...

现在我需要计算codingScheme标记下productCode标记的 BDR 值的数量。

我写了这个剧本:

Word1="<productCode>";
Word2="<codingScheme>BDR";
Word3="$Word1${Var}$Word2";
echo "$Word3";
grep -c "$Word3" fileFullName;

但它会计算productCodecodingScheme的总出现次数(例如productCode 10次,codingScheme次20次,然后返回30次,这不是必需的。)< / p>

1 个答案:

答案 0 :(得分:0)

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
>