Re: dbaccess format question
Posted in 1997
################################################ # Reformat Informix-SQL output across the page # # # # Usage: isqlformat filename | pr -f # # # # Doug Lawry, 17/10/97 # # # # Email: Doug_Lawry@compuserve.com # # # # Phone: +44 468 963 963 # ################################################ spaces=2 case $1 in -s[1-9]) spaces=`echo $1 | cut -c3-` shift ;; esac TEMP=${DBTEMP=/tmp}/isql.$$ trap ' rm -f $TEMP.? trap 0 2 exit ' 0 2 case $# in 0) cat > $TEMP.2 set $TEMP.2 ;; esac cat "$@" | awk ' BEGIN { row = 0 } /^$/ { column = 0 next } NR == 3 { printf("HEADER = %s", $0) offset = -1 exit } { if (!column++ && !row++) for (offset = index($0," "); offset < length($0); offset++) if (substr($0,offset+1,1) != " ") break data = length($0) - offset text = substr($0,offset+1,data) if (row == 1) { name[column] = substr($0,1,offset) size[column] = index($0," ") - 1 type[column] = "" } if (size[column] < data) size[column] = data if (text ~ "[^-.0-9]" || text ~ "^0[^.]" || data > 14) type[column] = "-" } END { for (count = 1; count <= column; count++) printf("%-18s %%%s%ds\\n", name[count], type[count], size[count]) printf("\\nOFFSET = %d", offset) } ' > $TEMP.1 cat $TEMP.1 "$@" | awk ' BEGIN { row = 0 offset = 0 } /^$/ { column = 0 next } /^HEADER/ { header = substr($0,10,80) next } /^OFFSET/ { offset = $3 next } offset == 0 { name[NR] = $1 format[NR] = $2 maxcol = NR next } offset == -1 { if (NR < 5) next if (!(row++ % 54)) printf("%s\\n\\n", header) print next } { if (!column++ && !(row++ % 54)) { for (count = 1; count <= maxcol; count++) { if (count > 1) for (char = 1; char <= spaces; char++) printf(" ") printf(format[count], name[count]) } printf("\\n\\n") } if (column > 1) for (char = 1; char <= spaces; char++) printf(" ") printf(format[column], substr($0,offset+1,80)) if (column == maxcol) printf("\\n") } ' spaces=$spaces