从Linux终端统计XML元素数量
我的xml文件大概长这样:
<elements>
<elem>
....bunch of other elements
</elem>
</elements>
有没有办法通过Linux命令行来统计某个xml文件中elem
标签出现的次数?比如用perl、python或者其他什么可以用一行命令完成的工具?
我可以试试像grep -c "elem" myfile.xml
这样的命令,然后把得到的数字除以2
来算出次数,但有没有类似的更简洁的一行命令呢?
补充:
我在寻找替代的grep解决方案。
7 个回答
15
你还可以使用 xmllint
这个工具:
xmllint --xpath "count(//elem)" myfile.xml
15
xml_grep
这个工具正好可以满足你的需求——你可以试试下面的命令:
xml_grep --count //elem example.xml
这个工具在Debian和Ubuntu系统的xml-twig-tools
软件包里,你可以在这里找到相关文档。
0
@OP,所有的 grep
解决方案都有一个根本的“缺陷”,就是如果一行中有多个 <elem>
标签,它们的计数会出错。可以使用 awk
来编程计数。
awk 'BEGIN{
totalelem=0
totalendelem=0
}
/<elem>/{
m = split($0,a,"<elem>") # or m = gsub(/<elem>/,"")
totalelem+=m-1
}
/<\/elem>/{
m = split($0,b,"</elem>") # or m = gsub("</elem>","")
totalendelem+=m-1
}
END{
print "Total elem tags: " totalelem
print "Total end elem tags: " totalendelem
# if you want to make sure each elem tag is enclosed by corresponding end elem tag
if ( totalelem == totalendelem ){
print "Equal start and end tags"
}
}
' file
这个解决方案假设你知道你的 elem 标签是什么样子的。没有 <elem />
或者那些带有额外属性的标签。