Search code examples
arraysbashmatharithmetic-expressions

Arithmetic with array elements in bash


I'm using bash and trying to add all elements of an array that was created from a file.

while read line; do
    array=($line);
    sum=0
    length=${#array[@]}
    for i in ${array[@]:0:$length}; do
       sum=$[$sum+${array[i]}]   #<--- this doesn't work?
    done
    echo $sum
done < $1

edit: I should have been clearer why i want to use array splitting in for loop

The input may be ------> david 34 28 9 12

And I want to print ---> david 83

So I would like to loop through all elements accept the first one. so i would use:

length=$[${#array[@]} - 1]
for i in${array[@]:1:$length}

because of this i can't use:

for i in "${array[@]}"

Solution

  • Try using expr to add two expression something like:

    sum=$(expr "$sum" + "${arr[i]}")
    

    Or

    sum=$((sum + arr[i]))
    
    
    echo "11 13" >test.txt 
    echo "12" >>test.txt
    
    while read -a line; do ##read it as array
        sum=0
        for ((i=1; i < ${#line}; i++)); do ##for every number in line
           sum=$(expr "$sum" + "${line[i]}") ## add it to sum
        done
        echo $line[0] $sum ##print sum
    done < test.txt
    Output
    36
    

    After OP's edit:

    echo "ABC 11 13" >test.txt echo "DEF 12" >>test.txt

    while read -a line; do ##read it as array
    sum=0
    for ((i=1; i < $((${#line[@]})); i++)); do ##for every number in line
       sum=$(expr "$sum" + "${line[i]}") ## add it to sum
       if [[ $i -eq $((${#line[@]}-1)) ]]
       then
           echo "${line[0]} $sum" ##print sum
           sum=0
       fi
    done
    done < test.txt
    Output:
    ABC 24
    DEF 12