#! /bin/sh # # Usage: $0 tag-prefix num-levels [args...] # # eg: $0 out.bas 4 # PATH=/home/mouse/acc/bin:"$PATH" case $# in 0|1) echo Usage: $0 tag-prefix num-levels '[args...]' 1>&2 exit 1 ;; esac pfx="$1" nlev="$2" shift shift t=/tmp/report.$$ trap 'touch '$t'.x; rm -f '$t'.*; exit' 0 1 2 15 ( echo "$pfx":"$nlev":"`conf defcurrency $*`" cat ) | awk -F: 'NR==1 { if ($1 == "") { pfx = ""; pfxlen = 0; } else { pfx = $1 "."; pfxlen = length(pfx); } maxlev = $2 + 0; tot[""] = 0; defcurr = $3; cat[""] = 0; next; } (NF==7)||(NF==8) { if (NF == 7) curr = defcurr; else curr = $8; if ((length($4) >= pfxlen) && (substr($4,1,pfxlen) == pfx)) { nlev = split($4,lev,"."); if (nlev > maxlev) nlev = maxlev; s = ""; for (i=1;i<=nlev;i++) s = s "." lev[i]; s = substr(s,2,length(s)); tot[s ":" curr] += $7; cat[s] = 1; cseen[curr] = 1; } } END { n = 0; for (c in cseen) printf("a:%s\n",c); for (s in cat) { if (s != "") { printf("b%d:%s\n",n,s); for (c in cseen) { printf("c%d:%s:%d\n",n,c,tot[s ":" c]); } n ++; } } }' > $t.1 ( < $t.1 egrep '^a' ( < $t.1 sed -e '/^[ac]/d' < $t.1 egrep '^c' | fmtamt $* ) | sort +0.1n -1 +0 | awk '/^b/ { if (NR > 1) printf("d\n"); print; next; } { print; }' echo d ) | awk -F: 'BEGIN { ncurr = 0; saw[""] = 0; oln = 0; } /^a/ { ncurr ++; curr[ncurr] = $2; currx[$2] = ncurr; allzero[ncurr] = 1; next; } /^b/ { s = $2; for (i in saw) saw[i] = 0; if (length(s) > maxlen[0]) maxlen[0] = length(s); next; } /^c/ { if (($3+0) != 0) { saw[$2] = 1; val[$2] = $3 + 0; fmtval[$2] = substr($0,length($1)+length($2)+length($3)+4,length($0)); } next; } /^d/ { out[oln ".0"] = s; for (i=1;i<=ncurr;i++) { c = curr[i]; if (saw[c]) { out[oln "." i] = fmtval[c]; allzero[i] = 0; if (length(fmtval[c]) > maxlen[i]) maxlen[i] = length(fmtval[c]); } } for (s in saw) { if (saw[s] && (currx[s] == "")) { out[oln "x"] = out[oln "x"] " " fmtval[s]; } } oln ++; next; } END { for (i=0;i<=ncurr;i++) { spc[i] = " "; while (length(spc[i]) <= maxlen[i]) spc[i] = spc[i] spc[i]; } for (i=0;i