shell:从字符串中的行添加

时间:2015-07-30 07:24:15

标签: shell awk addition

我们说我有一个这样的变量: list='1 1 1.4 1 1 1'

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

我正在说一个循环:

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

但是这不起作用,因为我以前不知道如何从线上保存价值。

4 个答案:

答案 0 :(得分:0)

我不知道是否使用zsh(具有浮点支持)是一种选择,但如果是,则可以这样做:

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

答案 1 :(得分:0)

以下是使用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"

答案 2 :(得分:0)

这将是我的bash摘要:

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

答案 3 :(得分:0)

使用awk你可以这样做:

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