如何从XML文件中提取dur子串对应数值并对结果求和
解决方案
方法1:基于grep+awk实现(适配你当前学习的工具栈)
你之前的grep命令已经接近需求,只需要调整匹配规则,再用awk做数值累加即可,完整命令如下:
grep -o 'dur="[^"]*"' 你的XML文件名.xml | awk -F '"' '{sum += $2} END {print "dur总和:" sum}'
命令说明:
grep -o 'dur="[^"]*"':精准匹配所有dur="数值"格式的内容,输出的每一行格式为dur="xxx",避免匹配到其他无关的dur字符串- 管道符
|将grep的输出传给awk处理 awk -F '"'指定双引号为字段分隔符,每一行被双引号拆分后,第二字段$2就是我们要的数值- awk内部自动用
sum变量累加所有数值,所有行处理完成后输出最终总和
用你提供的测试XML运行,最终输出结果为6592,和手动计算的结果一致。
方法2:基于XML专用解析工具实现(更稳妥,无格式匹配错误风险)
如果后续要处理的XML格式可能变化(比如属性换行、顺序调整),推荐用系统自带的XML解析工具xmllint处理,避免grep正则匹配出错,命令如下:
xmllint --xpath 'sum(//*[local-name()="Material"]/@dur)' 你的XML文件名.xml
该命令直接通过XPath语法提取所有Material标签的dur属性,自动求和输出,不需要额外做数值处理。
内容的提问来源于stack exchange,提问作者pitrie17
相关产品推荐
相关产品推荐

