table
Command line utility to format and display CSV.
Manual
See https://strahinja.srht.site/man/table/table.1.html.
Prerequisites
C compiler - defaults in config.mk
Install
$ git clone https://git.sr.ht/~strahinja/table $ cd table $ su # make install
With got:
$ got clone https://git.sr.ht/~strahinja/table $ got checkout table.git $ cd table $ su # make install
Persistent build configuration file
The file config.mk will be sourced when building targets which also accept
configuration through environment variables. For example, CPPFLAGS
and
PREFIX
are specified in config.mk.
OpenBSD
Before running make(1), comment the CPPFLAGS
definition in config.mk
above the line with the “OpenBSD” comment and uncomment the one below it:
#CPPFLAGS = -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200809L \ # -D_XOPEN_SOURCE=700 # OpenBSD CPPFLAGS = -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200809L \ -D_XOPEN_SOURCE=700 -D_BSD_SOURCE
Also, do the same for MANPREFIX
:
#MANPREFIX = $(DESTDIR)$(PREFIX)/share/man # OpenBSD MANPREFIX = $(DESTDIR)$(PREFIX)/man
Install (Arch)
$ git clone https://aur.archlinux.org/table.git $ cd table $ makepkg -si
Examples
Periodically display CPU load information in a single-line table (requires a mounted Linux-style /proc file system and GNU watch(1))
$ watch "table /proc/loadavg -d ' ' -c 50 -n -s ss"
Format a long list of files in the current directory in a double line table with single-line column divisors
$ LC_ALL=C ls -l | tail -n +2 | sed -E 's/ +/ /g' | table -d ' ' -n
Caution: format of ls(1) is not standardized, so this example might not work as intended.
Print information from /etc/passwd
in a table:
$ table -n -d : -f 3:1:1:1:4:4:4 /etc/passwd
Same as above, without borders and with different column alignment:
$ table -n -H -d: -arccclll -see -f3:1:1:1:4:4:4 /etc/passwd
Configuring GNU Midnight Commander (mc)
GNU Midnight Commander file manager can be configured to use table as aviewer (F3) for CSV files. To do that, edit /usr/lib/mc/ext.d/text.sh
(or make
and edit a local copy, for example in ~/bin/text.sh
, which we will assume
here) so that
case "${filetype}" in
block in do_view_action()
function includes:
csv) table -m -n "${MC_EXT_FILENAME}" ;;
You also need to edit extension file (Command->Edit extension file) or just
edit ~/.config/mc/mc.ext
and add the lines:
shell/.csv View=%view{ascii} ~/bin/text.sh view csv %var{PAGER:more}
before includes and default target.
Bonus – TSV viewer: include
tsv) tsvtable -m -n "${MC_EXT_FILENAME}" ;;
in ~/bin/text.sh
and
shell/.tsv View=%view{ascii} ~/bin/text.sh view tsv %var{PAGER:more}
in ~/.config/mc/mc.ext
.
Configuring ranger file manager
ranger file manager can be configured to use table as a CSV file viewer. To do that, add the following to~/.config/ranger/scope.sh
, within the
function handle_extension()
:
## CSV csv) table -m "${FILE_PATH}" && exit 5 exit 1;;
Bonus – TSV viewer:
## TSV tsv) tsvtable -m "${FILE_PATH}" && exit 5 exit 1;;
Configuring vifm
vifm file manager can also be configured to use table as a CSV fileviewer. To accomplish this, add the following lines to ~/.config/vifm/vifmrc
:
" CSV fileviewer *.csv \ table -m %c
Bonus – TSV viewer:
" TSV fileviewer *.tsv \ tsvtable -m %c
Changelog
See git log for details.
License
table - Command line utility to format and display CSV.
Copyright © 2020-2024 Страхиња Радић
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.