1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
#!/bin/bash
count=0
SC=9
E_DATAFILE=90
if [ ! -z "$1" ]
then
datafile="$1"
else
datafile=sample.dat
fi
if [ ! -e "$datafile" ]
then
echo "\""$datafile"\" does not exist!"
exit $E_DATAFILE
fi
arith_mean ()
{
local rt=0
local am=0
local ct=0
while read value
do
rt=$(echo "scale=$SC; $rt + $value" | bc)
(( ct++ ))
done
am=$(echo "scale=$SC; $rt / $ct" | bc)
echo $am; return $ct
} <"$datafile"
sd ()
{
mean1=$1
n=$2
sum2=0
avg2=0
sdev=0
while read value
do
diff=$(echo "scale=$SC; $mean1 - $value" | bc)
dif2=$(echo "scale=$SC; $diff * $diff" | bc)
sum2=$(echo "scale=$SC; $sum2 + $dif2" | bc)
done
avg2=$(echo "scale=$SC; $sum2 / $n" | bc)
sdev=$(echo "scale=$SC; sqrt($avg2)" | bc)
echo $sdev
} <"$datafile"
mean=$(arith_mean); count=$?
std_dev=$(sd $mean $count)
echo
echo "Number of data points in \""$datafile"\" = $count"
echo "Arithmetic mean (average) = $mean"
echo "Standard Deviation = $std_dev"
echo
exit
|