I have a function which outputs many rows of information which I want to format in columns. The problem is that the width of any particular "cell" (if I may use that term) of data is variable, so piping it to something like awk does not give me what I want.
The function is "keys" (not that it matters) and I'm trying something like this:
$ keys | awk '{ print $1"\t\t" $2 }'
but the output (a snippet of it, that is) looks like this:
"option-y" yank-pop "option-z" execute-last-named-cmd "option-|" vi-goto-column "option-~" _bash_complete-word "option-control-?" backward-kill-word "control-_" undo "control-?" backward-delete-char
How can I force things to stay in neat columns? Is this possible with awk, or do I need to use something else?
column(1)
is your friend.
$ column -t <<< '"option-y" yank-pop > "option-z" execute-last-named-cmd > "option-|" vi-goto-column > "option-~" _bash_complete-word > "option-control-?" backward-kill-word > "control-_" undo > "control-?" backward-delete-char > ' "option-y" yank-pop "option-z" execute-last-named-cmd "option-|" vi-goto-column "option-~" _bash_complete-word "option-control-?" backward-kill-word "control-_" undo "control-?" backward-delete-char
Found this by searching for "linux output formatted columns".
http://www.unix.com/shell-programming-scripting/117543-formatting-output-columns.html
For your needs, it's like:
awk '{ printf "%-20s %-40s\n", $1, $2}'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With