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
假设我有这样一个变量:
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