#!/bin awk -f BEGIN { FS="," rows[""]=0 rowsc[""]=0 labels[""]=0 } { if (NR == 1) { header=$0; cols=NF; } else if ($0 != header) { labels[$1]++ for (i=2; i<=NF; i++) { rows[$1 " " i] += $i rowsc[$1 " " i]++ } } } END { print header for (label in labels) { if (label == "") continue line=label for (i=2; i<=cols; i++) { if (rowsc[label " " i]) { avg=rows[label " " i]/rowsc[label " " i] line=sprintf("%s,%8.4f", line, avg) } } print line } }