BEGIN { FS = "," ; SUBSEP = "="; Beam = 20; OFMT = "%.8g"; resetSeed(); } { gsub(/[ \t]/,"",$0) } NR == 1{ header(); next } { data(One,All); N++; H[$NF]++ } END { o(One,"one"); o(All,"all"); report(One,All,N,H) } function header( i) { for(i=1;i<=NF;i++) Name[i] = $i } function data(one,all, i) { for(i=1;i r) { j = jiggle(b^2/(b+r)); #print "h " h " range " range " best " best " rest " rest " some " some " b " b " r " r " j " j value[range] = j; memo[j] = range; } } n = asort(value,sorted); stop = n < Beam ? 1 : n - Beam + 1; for(i=n; i >= stop; i--) if (sorted[i] > 0) min = out[h,memo[sorted[i]]] = sorted[i]; return min; }