Bash 'while read line' 成一个数组并求和

Posted

技术标签:

【中文标题】Bash \'while read line\' 成一个数组并求和【英文标题】:Bash 'while read line' into an array and sum totalBash 'while read line' 成一个数组并求和 【发布时间】:2012-08-17 17:20:04 【问题描述】:

希望有人能帮忙...

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

... 427562786 6834257 978539857 9742 578375 ...

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

我知道在这个脚本的某个地方我需要声明如下内容: IFS=' ' 而读行 在这里做数组创建魔法 完成/file

总和=0 而读行 做 SUM= 在这里求和数组元素 完成/file

printf $SUM

请比我知识渊博的人告诉我我缺少什么?谢谢。 :)

【问题讨论】:

【参考方案1】:

如果数组只是一个中间步骤并且不需要超出该点,那么这将带您直接获得最终答案:

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

【讨论】:

我已将语法调整为更简洁的形式(请参阅tldp.org/LDP/abs/html/arithexp.html)【参考方案2】:

在 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

【讨论】:

以上是关于Bash 'while read line' 成一个数组并求和的主要内容,如果未能解决你的问题,请参考以下文章

while语句

管道技巧-while read line

while read line 与for循环的区别

while read line 的字符串截取

linux shell 如何使用while read line去获取一个文件里指定符号前最长的长度

while read line 与 for 区别