如何在整齐的列中格式化bash命令的输出

ico*_*ast 50 bash awk zsh

我有一个函数输出许多行,我想在列中格式化.问题是任何特定的"单元格"(如果我可能使用该术语)的数据的宽度是可变的,所以将它管道化为像awk这样的东西并没有给我我想要的东西.

功能是"键"(不重要),我正在尝试这样的事情:

$ keys | awk '{ print $1"\t\t" $2 }'
Run Code Online (Sandbox Code Playgroud)

但是输出(它的一个片段,就是这样)看起来像这样:

"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
Run Code Online (Sandbox Code Playgroud)

我怎么能强迫东西留在整洁的柱子里呢?这是可能的awk,还是我需要使用其他东西?

Ign*_*ams 77

column(1) 是你的朋友.

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 当然不是.就像man page所说的那样,使用`-s`. (6认同)
  • 我知道,错误的主题,但是:这对于漂亮打印CSS非常有用,它有助于将css语句的属性精美地对齐! (4认同)

Kot*_*lar 40

通过搜索"linux output formatted columns"找到了这个.

http://www.unix.com/shell-programming-scripting/117543-formatting-output-columns.html

根据您的需求,它就像:

awk '{ printf "%-20s %-40s\n", $1, $2}'
Run Code Online (Sandbox Code Playgroud)

  • 我没有在我提供的示例输出中显示这一点,但在某些地方我有空格,我*不想*拆分,所以通过这个小调整你的awk片段我已经解决了问题:键| awk'BEGIN {FS ="\""}; {printf"%-20s%-40s \n",$ 1,$ 2,$ 3}' (2认同)