diff options
Diffstat (limited to 'sum1.awk')
| -rw-r--r-- | sum1.awk | 28 |
1 files changed, 24 insertions, 4 deletions
@@ -5,15 +5,35 @@ # output: sum of each column # missing entries are treated as zeros -BEGIN { OFS = FS } -{ - if (NF > nf_max) - nf_max = NF +function isnum(n) { + sign = "[+-]?" + decimal = "[0-9]+[.]?[0-9]*" + fraction = "[.][0-9]+" + exponent = "([Ee]" sign "[0-9]+)?" + number = "^" sign "(" decimal "|" fraction ")" exponent "$" + return n ~ number +} + + +BEGIN { + OFS = FS +} + + +NR == 1 { + for (i=1; i<=NF; i++) + isnum($i) ? header[i] = "col" i : header[i] = $i +} + + +NF > 0 { + (NF > nf_max) ? nf_max = NF : nf_max = nf_max for (i=1; i<=NF; i++) sum[i] += $i } + END { for (i=1; i<=nf_max; i++) { printf(OFMT, sum[i]) |
