Basically the same idea as @jesse_b's answer, but with one less intermediate variable:
$ awk '{ sum+=$2; dsum+=$3=$2/1000; print} END{print "sum",sum,dsum}' file
value1 100 0.1
value2 500.10 0.5001
value3 2505 2.505
value4 35.4 0.0354
sum 3140.5 3.1405
You can use printf
if you need more precision:
$ awk '{
sum+=$2; dsum+=$3=sprintf("%.5f",$2/1000); print
}
END{printf "%s%s%.5f%s%.5f\n", "sum",OFS,sum,OFS,dsum}' file
value1 100 0.10000
value2 500.10 0.50010
value3 2505 2.50500
value4 35.4 0.03540
sum 3140.50000 3.14050
And here's a Perl way, for fun:
$ perl -lane '$sum+=$F[1]; $dsum+=$F[2]=sprintf("%.5f",$F[1]/1000);
print "@F"; }{ print "sum $sum $dsum"' file
value1 100 0.10000
value2 500.10 0.50010
value3 2505 2.50500
value4 35.4 0.03540
sum 3140.5 3.1405
And, with greater precision:
$ perl -lane '$sum+=$F[1]; $dsum+=$F[2]=sprintf("%.5f",$F[1]/1000);
print "@F"; }{
printf "sum %.5f %.5f\n", $sum, $dsum' file
value1 100 0.10000
value2 500.10 0.50010
value3 2505 2.50500
value4 35.4 0.03540
sum 3140.50000 3.14050
awk
? Is this homework?