Tabulate is a command line utility that converts standard input into pretty-printed tables. It is also a Tcl module that does the same with lists of lists. It was inspired by https://github.com/joepvd/table . Tabulate works in Tcl 8.5+ and Jim Tcl.
It is currently developed as part of the Sqawk repository.
Download the latest version: curl https://raw.githubusercontent.com/dbohdan/sqawk/master/lib/tabulate.tcl > tabulate.tcl
command line options:
flag | Description |
---|---|
-FS | Field Separator |
$ ps | jimsh ./tabulate.tcl ┌─────┬─────┬────────┬─────┐ │ PID │ TTY │ TIME │ CMD │ ├─────┼─────┼────────┼─────┤ │20583│pts/3│00:00:01│ zsh │ ├─────┼─────┼────────┼─────┤ │23301│pts/3│00:00:00│ ne │ ├─────┼─────┼────────┼─────┤ │28007│pts/3│00:00:00│ ps │ ├─────┼─────┼────────┼─────┤ │28008│pts/3│00:00:00│jimsh│ └─────┴─────┴────────┴─────┘
% source lib/tabulate.tcl % ::tabulate::tabulate -data {{Hello World}} ┌─────┬─────┐ │Hello│World│ └─────┴─────┘
Tabulate's code includes a DSL for processing named arguments stored in args.
proc ::tabulate::tabulate args { options::process $args \ store -data in data \ store -style in style default $::tabulate::style::default \ store -alignments or -align in align default {} \ store -margins in margins default 0 # ... }
JM 2015-08-03: I am probably doing something wrong:
% info tclversion 8.6 % info patchlevel 8.6.4 % source tabulate.tcl % ::tabulate::tabulate -data {{Hello World!}} wrong # args: should be "dict exists dictionary key ?key ...?"
dbohdan 2015-08-03: I cannot reproduce that on my system by just following your transcript. Could you file an issue at https://github.com/dbohdan/sqawk/issues ?
JM 2015-08-03: never mind, I found the error on my side...there were spaces after the "\" line continuations, hence breaking the command. Somehow I got that from the copy-paste from the source.
+------------------------------+ ¦Thanks¦for¦sharing¦ ¦ ¦ +------+---+-------+------+----¦ ¦ This ¦ is¦ a ¦second¦line¦ +------------------------------+
APN 2015-11-20: Neat and useful. One small caveat - you have to remember to use -encoding utf-8 with the source command since the style::default variable embeds graphics as raw UTF-8 characters. For cases where you don't have control of the source command used to pull in the tabulate.tcl file (for example with critcl), below is the equivalent using escape sequences.
variable default { top { left \U250C padding \U2500 separator \U252C right \U2510 } separator { left \U251C padding \U2500 separator \U253C right \U2524 } row { left \U2502 padding { } separator \U2502 right \U2502 } bottom { left \U2514 padding \U2500 separator \U2534 right \U2518 } }
See https://github.com/dbohdan/sqawk/blob/master/lib/tabulate.tcl .