shell循环运算
以递加为例
for 循环求和(抓取关键字1,输出文本第一列数字)
bc计算器可以做到常规的加减乘除运算,需要注意的是乘除法可以使用scale取输出的保留位数,具体规则可以百度,个人感觉不如awk好使
#整数运算
sum=0; for num in $(awk '/1/{print $1}' 1.txt);do sum=$(($sum+$num)); done; echo $sum
###小数运算,需确认是否安装bc
sum=0;
for num in $(awk '/1/{print $1}' 1.txt);do
sum=$(echo "$sum + $num"|bc);
done
echo $sum
while循环readline求和
awk '/1/{print $1}' 1.txt >11.txt
sum=0; while read num; do sum=$(echo "$sum + $num"|bc); echo $sum; done<11.txt echo $sum
以下方式不知道为什么,循环体外输出的'$sum'的值为0,只能从循环体内输出$sum(希望路过的大佬指点一下)
sum=0;
awk '/1/{print $1}' 1.txt | while read num do
sum=$(echo "$sum + $num"|bc);
echo $sum
done
echo $sum
如果单取求和的最终值可以取巧一下
export sum sum=0; awk '/1/{print $1}' 1.txt | while read num;do sum=$(echo "$sum + $num"|bc); echo $sum done > 2.txt tail -1 2.txt&&rm -f 2.txt
awk直接求和
awk '{sum+=$1}END{print sum}' 1.txt