summaryrefslogtreecommitdiff
path: root/diff2.awk
diff options
context:
space:
mode:
authorwukong <wukong@longaeva>2026-05-09 14:14:18 -0700
committerwukong <wukong@longaeva>2026-05-09 14:14:18 -0700
commit2140aa909280dfa8506466aa20b2c2b8cbb377fe (patch)
tree3ab447e0139f5b25fdd150dc0eaebb45961967ef /diff2.awk
parent6ff1fc477e92897177cb4cebdaa21fa41a41c0a4 (diff)
added diff2.awk to estimate numerical second diff;
removed commented out population covariance from cov.awk; added decimal points to pi estimate in em.awk;
Diffstat (limited to '')
-rw-r--r--diff2.awk97
1 files changed, 97 insertions, 0 deletions
diff --git a/diff2.awk b/diff2.awk
new file mode 100644
index 0000000..6086254
--- /dev/null
+++ b/diff2.awk
@@ -0,0 +1,97 @@
+#!/usr/bin/awk -f
+
+### diff2.awk
+# print numerical second diff along columns
+# dy[n] = y[n] - y[n-1]
+# d2y[n] = dy[n] - dy[n-1]
+
+
+BEGIN {
+ OFS = FS
+ sign = "[+-]?"
+ decimal = "[0-9]+[.]?[0-9]*"
+ fraction = "[.][0-9]*"
+ exponent = "([Ee]" sign "[0-9]+)?"
+ number = "^" sign "(" decimal "|" fraction ")" exponent "$"
+}
+
+
+# column headers
+NR == 1 {
+ # orig data columns
+ for (n=1; n<=NF; n++) {
+ if ($n !~ number) {
+ header[n] = $n
+ dheader[n] = "d_" $n
+ d2header[n] = "d2_" $n
+ }
+ else {
+ header[n] = "col" n
+ dheader[n] = "d_col" n
+ d2header[n] = "d2_col" n
+ }
+ printf(header[n])
+ printf(OFS)
+ }
+
+ # new diff columns
+ for (n=1; n<=NF; n++) {
+ printf(dheader[n])
+ printf(OFS)
+ }
+
+ # new diff2 columns
+ for (n=1; n<=NF; n++) {
+ printf(d2header[n])
+ printf(n < NF ? OFS : ORS)
+ }
+}
+
+
+NF > 0 {
+ (NF > nf_max) ? nf_max = NF : nf_max = nf_max
+
+ # orig data columns
+ for (n=1; n<=nf_max; n++) {
+ if ($n == header[n] || $n == dheader[n])
+ continue
+ if ($n ~ number)
+ printf(OFMT, $n)
+ else
+ printf("")
+ printf(OFS)
+ }
+
+ # new diff columns
+ for (n=1; n<=nf_max; n++) {
+ if ($n == header[n] || $n == dheader[n])
+ continue
+ if ($n ~ number) {
+ data[n] = $n
+ if (data_prev[n] ~ number)
+ diff[n] = data[n] - data_prev[n]
+ else
+ diff[n] = ""
+ data_prev[n] = data[n]
+ }
+ printf(diff[n])
+ printf(OFS)
+ }
+
+ # new diff2 columns
+ for (n=1; n<=nf_max; n++) {
+ if ($n == header[n] || $n == d2header[n])
+ continue
+ if (diff[n] ~ number) {
+ #data[n] = $n
+ if (diff_prev[n] ~ number)
+ diff2[n] = diff[n] - diff_prev[n]
+ else
+ diff2[n] = ""
+ diff_prev[n] = diff[n]
+ }
+ printf(diff2[n])
+ printf(n < nf_max ? OFS : ORS)
+ }
+}
+