Bash
如何從字元串中取出所有數字並將它們相加?
我必須解析生成的 .xml 文件以總結在某些軟體上執行 testSuite 的結果。例如,在一行中:
<Summary failed="10" notExecuted="0" timeout="0" pass="18065" />
這表示測試失敗、未執行和通過的次數。我需要弄清楚測試套件中有多少測試,所以我需要在上面的例子中添加 10+0+18065 = 18075。
我怎樣才能在 Bash 中做到這一點?
您可以
xmlstarlet
用於正確的 xml 解析。對於您的問題:
total=0; \ for i in failed notExecuted pass; do \ sum=`xmlstarlet sel -t -v "//Summary/@$i" test.xml`; \ total=$(($sum + $total)); \ done; \ echo "Total=$total"
test.xml
包含 xml 數據的文件在哪裡。
使用
perl
perl -lne 'my @a=$_=~/(\d+)/g;$sum+=$_ for @a; print $sum' file
使用
awk
tr ' ' '\n' < file | awk '/[0-9]+/ {gsub(/[^0-9]/, "", $0); sum+=$0} END {print sum}'
例子
% perl -lne 'my @a=$_=~/(\d+)/g;$sum+=$_ for @a; print $sum' foo 18075 % tr ' ' '\n' < foo | awk '/[0-9]+/ {gsub(/[^0-9]/, "", $0); sum+=$0} END {print sum}' 18075 % cat foo <Summary failed="10" notExecuted="0" timeout="0" pass="18065" />