Overview
guesswidth guesses the column position for fixed-width formats(fwf).
The output of the ps command has no delimiters, making the values difficult to machine-readable.
guesswidth guesses smarter than just space delimiters.
guesswidth is guessed based on the position of characters in the header. So having a header will give you better results.
Install command
There is also a guesswidth command.
go install github.com/noborus/guesswidth/cmd/guesswidth@latestGuess the width output with no delimiters in the command.
$ ps PID TTY TIME CMD 302965 pts/3 00:00:12 zsh 733211 pts/3 00:00:00 ps 733212 pts/3 00:00:00 tee 733213 pts/3 00:00:00 guesswidth
Split the output like this:
$ ps | guesswidth PID| TTY | TIME|CMD 302965| pts/3 | 00:00:08|zsh 539529| pts/3 | 00:00:00|ps 539530| pts/3 | 00:00:00|guesswidth
It can be converted to csv.
$ ps | guesswidth csv PID,TTY,TIME,CMD 302965,pts/3,00:00:12,zsh 733211,pts/3,00:00:00,ps 733212,pts/3,00:00:00,tee 733213,pts/3,00:00:00,guesswidth
ps | guesswidth --align PID|TTY | TIME|CMD 302965|pts/3|00:00:12|zsh 733211|pts/3|00:00:00|ps 733212|pts/3|00:00:00|tee 733213|pts/3|00:00:00|guesswidth
Usage
$ guesswidth -h [~/dev/src/github.com/noborus/guesswidth] Guess the width of the columns from the header and body, split them, insert fences and output. Usage: guesswidth [flags] guesswidth [command] Available Commands: completion Generate the autocompletion script for the specified shell csv Output in csv format help Help about any command Flags: -a, --align align the output --fence string fence (default "|") --header int header line number (default 1) -h, --help help for guesswidth --scannum int number of line to scan (default 100) --split int maximum number of splits (default -1) -v, --version version for guesswidth Use "guesswidth [command] --help" for more information about a command.
Examples
guesswidth inserts a delimiter (| by default) (Colors are changed here for clarity).
Even if there are spaces in the header or body, they will be separated correctly.


