将Bash中的'while read line'转换为数组并求和总和

3

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

我已经将整数解析成文件,并用回车分隔,就像这样:

...
427562786
6834257
978539857
9742
578375
...

我想将它们放入一个数组中并计算总和。 然而,在进行了一些热情的谷歌搜索后,我只发现使用for循环是合理的方法,但我可以很自信地说,这不是逐行读取文件的最佳方法。

我知道在这个脚本中我需要声明类似于这样的内容:

IFS='
'
while read line
do
这里是创建数组的魔术操作
done < /tmp/file

SUM=0
while read line
do
SUM= 这里是求数组元素总和的魔法操作
done < /tmp/file

printf $SUM

请问有比我更有知识的人可以让我知道我缺失什么吗? 谢谢。 :)

2个回答

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

我已经调整了语法,使其更加简洁(请参见http://tldp.org/LDP/abs/html/arithexp.html)。 - Chris

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接