BEGIN { sign = "[+-]?" decimal = "[0-9]+[.]?[0-9]*" fraction = "[.][0-9]*" exponent = "([Ee]" sign "[0-9]+)?" number = "^" sign "(" decimal "|" fraction ")" exponent "$" } NR == 1 { header_nf = NF for (n=1; n<=NF; n++) { if ($n !~ number) header[n] = $n else header[n] = n } } NF != 0 { printf("\n%s: %s\n", NR, $0) if (NF > max_nf) max_nf = NF ### iterate over columns for (y=1; y<=max_nf; y++) { if ($y ~ number) { count[y] += 1 data[y] = $y sum[y] += $y mean[y] = data[y] diff[y] = data[y] - data_prev[y] print header[y], data[y], sum[y], diff[y] data_prev[y] = data[y] } } }