#! /usr/bin/gawk -f # Last edited on 2002-02-22 18:33:31 by stolfi BEGIN{ usage = ( ARGV[0] " [ -v quantum=QUANTUM ] < INFILE > OUTFILE" ); # Reads a file with one integer number per line. Writes a histogram # with buckets of width QUANTUM if (quantum == "") { quantum = 1; } split("", hist); nmin = 999999999; nmax = 000000000; nlin = 0; ntot = 0; nntot = 0; } /^ *([#]|$)/ { next; } (NF == 1){ n = $1; nlin++; ntot += n; nntot += n*n; i = int(n/quantum); if (! (i in hist)) { hist[i] = 0; } hist[i]++; if (n < nmin) { nmin = n; } if (n > nmax) { nmax = n; } next; } END { printf "min = %3d max = %3d\n", nmin, nmax > "/dev/stderr"; if (nlin > 0) { printf "avg = %5.2f\n", ntot/nlin > "/dev/stderr"; } if (nlin > 1) { printf "dev = %5.2f\n", sqrt((nntot - ntot*ntot/nlin)/(nlin-1)) > "/dev/stderr"; } for (n = nmin-quantum; n <= nmax+quantum; n += quantum) { i = int(n/quantum); if (! (i in hist)) { hist[i] = 0; } printf "%02d %02d %3d\n", i*quantum, (i+1)*quantum-1, hist[i]; } }