since debian stable's version of column(1) doesn't handle successive delimiters
$ go install go.senan.xyz/table/cmd/table@master
$ printf '%s\t%s\t%s\n' '' b c aaaa b c a bbbbbb c '' '' c | table
b c
aaaa b c
a bbbbbb c
c
$ printf '%s\t%s\t%s\n' '' b c aaaa b c a bbbbbb c '' '' c | table ' | '
| b | c
aaaa | b | c
a | bbbbbb | c
| | c
# works for streams with a flush interval
$ tail -f logs | pick-cols | table " : " 3
2023 : event one : event param : 53f1a74226358c8c7
2023 : event two : event name is longer : 53f1a74226358c8c7
2023 : event three : event : 53f1a74226358c8c7
2023 : event longer one : event longer param : 53f1a74226358c8c7
2023 : event longer two : event longer name is longer : 53f1a74226358c8c7
2023 : event longer three : event longer : 53f1a74226358c8c7
Package table provides a Writer that formats tab-separated data into aligned columns.
Column widths account for ANSI escape sequences and grapheme cluster widths (via uniseg).
FormatLines formats the provided lines in-place.
Lines with a mismatched column count (relative to the first line) are ignored,
matching the behavior of the original code (they remain unchanged).
Flush formats all buffered rows and writes them to out, then resets rows/widths.
Returns the first error encountered during Write/addLine or any write error.
Write ingests bytes, splitting on '\n' (handles optional trailing '\r').
Parsed lines are buffered; call Flush to write formatted output to out.
Column-count errors are recorded and surfaced on Flush; subsequent lines are still processed.