Bash'while read line'成为一个数组和总和

时间:2012-08-22 09:50:54

标签: linux arrays bash math while-loop

我希望有人能帮忙......

我已经将整数解析为由回车分隔的文件,如下所示:

...
427562786个
6834257个
978539857个
9742
578375个
...

我希望将这些放入一个数组并总计。然而,经过一些热切的谷歌搜索之后,我只能找到一种合理的方法来使用for循环来实现这一点,我的权威并不是逐行读取文件的最佳方式。

我知道在这个脚本的某个地方我需要声明这样的东西:

IFS ='

读线时 做
数组创建魔法
完成<的/ tmp /文件

SUM = 0
读线时 做
SUM = sum数组元素魔法
完成<的/ tmp /文件

printf $ SUM

请知道比我知识渊博的人让我知道我错过了什么?谢谢。 :)

2 个答案:

答案 0 :(得分:2)

如果阵列只是一个中间步骤,并且在此之后不需要,那么这将直接带您到最终答案:

sum=0
while read N
do
    # sum=$((sum+N)) - the line below shows a more concise syntax
    ((sum += N))
    echo "Added $N to reach $sum"
done < /tmp/list_of_numbers

echo $sum

答案 1 :(得分:1)

在bash 4中,有mapfile命令。

mapfile -t numbers < /tmp/list_of_numbers

for n in "${numbers[@]}"; do
    (( sum += n ))
done

在早期版本的bash中,你可以使用read,但它更冗长:

IFS=$'\n' read -d '' -a numbers < /tmp/list_of_numbers