summaryrefslogtreecommitdiff
path: root/sum4.awk
diff options
context:
space:
mode:
authorwukong <wukong@longaeva>2018-06-05 22:34:51 -0700
committerwukong <wukong@longaeva>2018-06-05 22:34:51 -0700
commit8f263e859e0970ce87b77addc80dec28e8fc7e82 (patch)
treeb0bdc392230c9960f5e5f5b3dea979405334628f /sum4.awk
re-init
Diffstat (limited to 'sum4.awk')
-rw-r--r--sum4.awk37
1 files changed, 37 insertions, 0 deletions
diff --git a/sum4.awk b/sum4.awk
new file mode 100644
index 0000000..c592409
--- /dev/null
+++ b/sum4.awk
@@ -0,0 +1,37 @@
+### sum4.awk, print sums of numeric columns
+# input: rows of integers and strings
+# output: sums of numeric columns
+
+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
+}
+
+NR==1 {
+ nfldz = NF
+ for (i=1; i<=NF; i++) {
+ if (!isnum($i))
+ header[i] = $i
+ }
+}
+
+{
+ for (i=1; i<=NF; i++) {
+ sum[i] += $i
+ count[i]++
+ }
+}
+
+END {
+ for (i=1; i<=nfldz; i++) {
+ if (header[i])
+ printf("%s: \t", header[i])
+ #if (numcol[i])
+ printf("%g\n", sum[i])
+ printf(i < nfldz ? "" : "\n")
+ }
+}