Calculating percentages in arbitrary number of columns
It's quite good. I can only slightly simplify it:

NR==1 {print; next} 
{
    label[NR] = $1
    for (i=2; i&lt;=NF; i++) { sum[i] += $i; val[NR,i] = $i }
}
END {
    OFS = "\t"
    for (nr=2; nr&lt;=NR; nr++) {
        $1 = label[nr]
        for (i=2; i&lt;=NF; i++) $i = sprintf("%.2f", 100*val[nr,i]/sum[i])
        print
    }
}



don't need to store the header line, just print it and move on
I find sum[i] += col[i][NR] = $i needlessly complicated
take advantage of OFS and awk can build the line itself