mirror of
https://github.com/GnoConsortium/gno.git
synced 2024-11-19 11:30:51 +00:00
40 lines
963 B
Plaintext
40 lines
963 B
Plaintext
|
# table1 - single column formatter
|
||
|
# input: one column of strings and decimal numbers
|
||
|
# output: aligned column
|
||
|
|
||
|
BEGIN {
|
||
|
blanks = sprintf("%100s", " ")
|
||
|
number = "^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)$"
|
||
|
left = "^[+-]?[0-9]*"
|
||
|
right = "[.][0-9]*"
|
||
|
}
|
||
|
|
||
|
{ row[NR] = $1
|
||
|
if ($1 ~ number) {
|
||
|
match($1, left) # matches the empty string, so RLENGTH>=0
|
||
|
lwid = max(lwid, RLENGTH)
|
||
|
if (!match($1, right))
|
||
|
RLENGTH = 0
|
||
|
rwid = max(rwid, RLENGTH)
|
||
|
wid = max(wid, lwid + rwid)
|
||
|
} else
|
||
|
wid = max(wid, length($1))
|
||
|
}
|
||
|
|
||
|
END {
|
||
|
for (r = 1; r <= NR; r++) {
|
||
|
if (row[r] ~ number)
|
||
|
printf("%" wid "s\n", numjust(row[r]))
|
||
|
else
|
||
|
printf("%-" wid "s\n", row[r])
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function max(x, y) { return (x > y) ? x : y }
|
||
|
|
||
|
function numjust(s) { # position s
|
||
|
if (!match(s, right))
|
||
|
RLENGTH = 0
|
||
|
return s substr(blanks, 1, int(rwid-RLENGTH+(wid-(lwid+rwid))/2))
|
||
|
}
|