Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I format the output of a bash command in neat columns

Tags:

bash

zsh

awk

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?

like image 874
iconoclast Avatar asked Jun 24 '11 03:06

iconoclast


2 Answers

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 
like image 156
Ignacio Vazquez-Abrams Avatar answered Sep 29 '22 21:09

Ignacio Vazquez-Abrams


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}' 
like image 38
Koterpillar Avatar answered Sep 29 '22 21:09

Koterpillar