Calcul de la somme d'un champ spécifique à partir des entrées du tableau
Angio
J'ai un tableau trf
. Voudrait calculer la somme du deuxième élément dans chaque entrée de tableau.
Exemple de contenu de tableau
trf=( "2 13 144" "3 21 256" "5 34 389" )
Voici l'implémentation actuelle, mais je ne la trouve pas assez robuste. Par exemple, il échoue avec un nombre arbitraire d'éléments (mais considéré comme constant d'un élément de tableau à un autre) dans chaque entrée de tableau.
cnt=0
m=${#trf[@]}
while (( cnt < m )); do
while read -r one two three
do
sum+="$two"+
done <<< $(echo ${array[$count]})
let count=$count+1
done
sum+=0
result=`echo "$sum" | /usr/bin/bc -l`
Shawn
Vous rendez les choses trop compliquées. Quelque chose comme
#!/usr/bin/env bash
trf=( "2 13 144" "3 21 256" "5 34 389" )
declare -i sum=0 # Integer attribute; arithmetic evaluation happens when assigned
for (( n = 0; n < ${#trf[@]}; n++)); do
read -r _ val _ <<<"${trf[n]}"
sum+=$val
done
printf "%d\n" "$sum"
en pure bash
, ou utilisez simplement awk
(c'est pratique si vous avez des nombres à virgule flottante dans vos données réelles):
printf "%s\n" "${trf[@]}" | awk '{ sum += $2 } END { print sum }'