[comp.sources.misc] v05i013: Statistical awk scripts

tr@wind.bellcore.com (tom reingold) (10/28/88)

Posting-number: Volume 5, Issue 13
Submitted-by: "tom reingold" <tr@wind.bellcore.com>
Archive-name: awkstats

[This was deferred for a bit in memory of the Xenix smail mods posting that
had to be superseded time after time after... you get the idea.  I prefer
making sure the posting is stable first....  ++bsa]

You know how it goes.  You clean your code up just to make it look
pretty and you break it.  Ok, so this version works.  I hope you
haven't posted yesterday's version.

Thanks!

#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	README
#	stats1.awk
#	stats2.awk
# This archive created: Sat Oct 22 10:27:35 1988
# By:	tom reingold (Bellcore, Morristown, Noo Joizy)
export PATH; PATH=/bin:$PATH
if test -f 'README'
then
	echo shar: will not over-write existing file "'README'"
else
cat << \SHAR_EOF > 'README'

Here is an awk script I wrote for the hell of it because I am home
sick today.  It computes the standard boring univariate statistics.
I have enclosed two versions.  "stats1.awk" requires the new new
version of awk, which has user-definable functions.  (MKS awk allows
this too!)  In stats1.awk, I define a function called pow, which
in and of itself, is useful.  "stats2.awk" doesn't require the new
awk.  It may actually be faster too since it doesn't do an interpreted
function call.  But it's not as cool.

Tom Reingold
PAPERNET:                      |INTERNET:       tr@bellcore.bellcore.com
Bell Communications Research   |UUCP-NET:       bellcore!tr
445 South St room 2L350        |SOUNDNET:       (201) 829-4622 [work],
Morristown, NJ 07960-1910      |                (201) 287-2345 [home]
SHAR_EOF
if test 799 -ne "`wc -c < 'README'`"
then
	echo shar: error transmitting "'README'" '(should have been 799 characters)'
fi
fi # end of overwriting check
if test -f 'stats1.awk'
then
	echo shar: will not over-write existing file "'stats1.awk'"
else
cat << \SHAR_EOF > 'stats1.awk'
{
	a[NR] = $1
	sum += a[NR]
	sumsq += pow(a[NR], 2.0)
}
END {
	mean = (sum / NR)
	stddev = sqrt((sumsq / NR) - pow(mean, 2.0))
	printf "sum is %1.2f, mean is %1.2f, n is %d, stddev is %1.3f\n", \
		sum, mean, NR, stddev
}
func pow(mantissa, exponent)
{
	if (exponent == 0)
		return(1)
	if (mantissa == 0)
		return(0)
	return(exp(exponent * log(mantissa)))
}
SHAR_EOF
if test 358 -ne "`wc -c < 'stats1.awk'`"
then
	echo shar: error transmitting "'stats1.awk'" '(should have been 358 characters)'
fi
fi # end of overwriting check
if test -f 'stats2.awk'
then
	echo shar: will not over-write existing file "'stats2.awk'"
else
cat << \SHAR_EOF > 'stats2.awk'
{
	a[NR] = $1
	sum += a[NR]
	sumsq += (a[NR] * a[NR])
}
END {
	mean = (sum / NR)
	stddev = sqrt((sumsq / NR) - (mean * mean))
	printf "sum is %1.2f, mean is %1.2f, n is %d, stddev is %1.3f\n", \
		sum, mean, NR, stddev
}
SHAR_EOF
if test 221 -ne "`wc -c < 'stats2.awk'`"
then
	echo shar: error transmitting "'stats2.awk'" '(should have been 221 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0