shell:从字符串中的行添加

shell: addition from lines in an string

假设我有这样一个变量: list='1 1 1.4 1 1 1'

现在我想将每一行的值添加到前一行的值。像这样: result='1 2 3.4 4.4 5.4' 它也必须使用浮点数,所以我想 awk 是最好的工具。

我是用 while 循环声明的:

while read line; do 
    add=$( awk 'BEGIN{ print "'"$x"'" + "'"$line"'" }' ) 
done <<< "$list"

但这行不通,因为我不知道如何保存前一行的值。

我不知道是否可以使用 zsh(支持浮点数),但如果可以,您可以简单地执行以下操作:

s=0;for i in $list; do s=$(($s+$i)); echo $s; done

这是一种使用 bc 的方法:

#!/bin/bash
list='1
1
1.4
1
1
1'

results=( )
total="0.0"
index=0
for line in $list; do
   total=$(bc -l <<< "$line + $total")
   echo $total
   results[$index]=$total
   let index++
done

echo ${results[@]}

另外:

total="0.0"; while read v; do total=$(bc -l <<< "$v + $total"); echo $total; done <<< "$list"

这将是我的 bash 片段:

prev=0
for val in $list; do
  val=$(echo "$val + $prev"|bc)
  prev=$val
  result="${result}${val}\n"
done
echo -e "$result"

使用 awk 可以做到:

awk 'NR==1{print; s=; next} {s+=; print s}' file
1
2
3.4
4.4
5.4
6.4