xref: /freebsd/contrib/one-true-awk/testdir/p.table (revision 23f24377b1a9ab6677f00f2302484d6658d94cab)
1*23f24377SWarner Losh# table - simple table formatter
2*23f24377SWarner Losh
3*23f24377SWarner LoshBEGIN {
4*23f24377SWarner Losh    FS = "\t"; blanks = sprintf("%100s", " ")
5*23f24377SWarner Losh    number = "^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)$"
6*23f24377SWarner Losh}
7*23f24377SWarner Losh
8*23f24377SWarner Losh{   row[NR] = $0
9*23f24377SWarner Losh    for (i = 1; i <= NF; i++) {
10*23f24377SWarner Losh        if ($i ~ number)
11*23f24377SWarner Losh            nwid[i] = max(nwid[i], length($i))
12*23f24377SWarner Losh        wid[i] = max(wid[i], length($i))
13*23f24377SWarner Losh    }
14*23f24377SWarner Losh}
15*23f24377SWarner Losh
16*23f24377SWarner LoshEND {
17*23f24377SWarner Losh    for (r = 1; r <= NR; r++) {
18*23f24377SWarner Losh        n = split(row[r], d)
19*23f24377SWarner Losh        for (i = 1; i <= n; i++) {
20*23f24377SWarner Losh            sep = (i < n) ? "   " : "\n"
21*23f24377SWarner Losh            if (d[i] ~ number)
22*23f24377SWarner Losh                printf("%" wid[i] "s%s", numjust(i,d[i]), sep)
23*23f24377SWarner Losh            else
24*23f24377SWarner Losh                printf("%-" wid[i] "s%s", d[i], sep)
25*23f24377SWarner Losh        }
26*23f24377SWarner Losh    }
27*23f24377SWarner Losh}
28*23f24377SWarner Losh
29*23f24377SWarner Loshfunction max(x, y) { return (x > y) ? x : y }
30*23f24377SWarner Losh
31*23f24377SWarner Loshfunction numjust(n, s) {   # position s in field n
32*23f24377SWarner Losh    return s substr(blanks, 1, int((wid[n]-nwid[n])/2))
33*23f24377SWarner Losh}
34