簡體   English   中英

用bash中的數組元素算術

[英]Arithmetic with array elements in bash

我正在使用bash並嘗試添加從文件創建的數組的所有元素。

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

編輯:我應該更清楚為什么我想在for循環中使用數組拆分

輸入可能是------> david 34 28 9 12

我想打印--->大衛83

所以我想循環遍歷所有元素接受第一個。 所以我會用:

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

因為這個我不能用:

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

嘗試使用expr添加兩個表達式,如:

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

要么

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

OP編輯后:

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

如果你想使用bash中的循環對文件的每一行中的數字求和,你可以這樣做

#!/bin/bash
while read line; do
    array=($line);
    sum=0
    length=${#array[@]}
    for i in ${array[@]:0:$length}; do
       sum=$[$sum+$i]
    done
    echo $sum
done < "$1"

與代碼的不同之處在於i是數組中的元素,而不是索引。

但是,在bash中擁有文件的速度相當慢。 你可能最好在awk中完成任務,例如:

awk '{s=0;for(i=1;i<=NF;i++) s+=$i;print s}' file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM