summaryrefslogtreecommitdiff
path: root/sum1.awk
diff options
context:
space:
mode:
Diffstat (limited to 'sum1.awk')
-rw-r--r--sum1.awk28
1 files changed, 24 insertions, 4 deletions
diff --git a/sum1.awk b/sum1.awk
index 8f1419b..9266789 100644
--- a/sum1.awk
+++ b/sum1.awk
@@ -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])