diff options
Diffstat (limited to '')
| -rw-r--r-- | cov.awk | 1 | ||||
| -rw-r--r-- | diff.awk | 1 | ||||
| -rw-r--r-- | diff2.awk | 97 | ||||
| -rw-r--r-- | em.awk | 2 |
4 files changed, 99 insertions, 2 deletions
@@ -36,7 +36,6 @@ NF > 0 { meanx[x,y] += dx[x,y]/count[x,y] meany[x,y] += dy[x,y]/count[x,y] C[x,y] += dx[x,y]*dy[x,y] - # cov_pop[x,y] = C[x,y]/count[x,y] (count[x,y] > 1) ? cov_samp[x,y] = C[x,y]/(count[x,y] - 1) : cov_samp[x,y] = "" } } @@ -2,6 +2,7 @@ ### diff.awk # print numerical diff along columns +# dy[n] = y[n] - y[n-1] BEGIN { 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) + } +} + @@ -8,7 +8,7 @@ BEGIN { ARGV[1] ? OFMT = "%." ARGV[1] "g" : OFMT = "%.12g" # constants - pi = 4.0*atan2(1,1) # rad + pi = 4.0*atan2(1.0,1.0) # rad c0 = 299792458E0 # m/s, exact mu0 = (4.0E-7)*pi # H/m = (T*m)/A = N/(A^2) = (kg*m)/(A*s) epsilon0 = (mu0*c0^2)^-1 # F/m = C/(V*m) = (A^2*s^4)/(kg*m^3) |
