BEGIN {Enough=10; FS="\n"; RS=""; _ = SUBSEP=","} {gsub(/[\[\]]/,"") } /#/ { skip} $NF {for(I=1;I<=NF;I++) { n=split($I,Tmp,",") score = Tmp[1] class = Tmp[2] sub(/[^,]+,[^,]+,/,"",$I) gsub(/,/,"+",$I) out[class _ $I,++things[class _ $I]]= score }} END { printf("%s , %s , %4s ,%4s +- %4s\n", "class", "rule", "N","mean", "sd" ) for(t in things) { sum=sumsq=n=0 for(i=1;i<=things[t];i++) { one = out[t _ i] sum += one sumsq += one*one n++ } OFS="," if (n > Enough) printf("%s , %s , %5.2f +- %4.2f , %s\n", t,n,100*sum/n, 100*sd(sumsq,sum,n) ,chars(100*sum/n)) } } function chars(n, c, out) { c = c ? c : "*" while(n-- > 0) out = out c return out } function sd(sumSq,sumX,n) { return sqrt((sumSq-((sumX*sumX)/n))/(n-1)); }