我怎样才能格式输出一个bash命令整齐的列

我有一个函数,输出我想要在列中格式化的许多行信息。 问题是任何特定的“单元格”(如果我可能使用这个术语)数据的宽度是可变的,所以将它布置成像awk这样的东西不会给我我想要的。

该函数是“键”(不是那么重要),我想这样的事情:

$ keys | awk '{ print $1"\t\t" $2 }' 

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

 "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 

我怎么能强迫事物留在整齐的列? 这是可能的awk,还是我需要使用别的东西?

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 

通过search“linux输出格式化列”find了这个。

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

为了您的需要,就像

 awk '{ printf "%-20s %-40s\n", $1, $2}' 

尽pipe可以使用awkprintf ,但您可能需要查看pr或(在BSDish系统上)进行格式化。

由于AIX没有“列”命令,我在下面创build了简单的脚本。 没有文档和input内容,它会更短… 🙂

 #!/usr/bin/perl # column.pl: convert STDIN to multiple columns on STDOUT # Usage: column.pl column-width number-of-columns file... # $width = shift; ($width ne '') or die "must give column-width and number-of-columns\n"; $columns = shift; ($columns ne '') or die "must give number-of-columns\n"; ($x = $width) =~ s/[^0-9]//g; ($x eq $width) or die "invalid column-width: $width\n"; ($x = $columns) =~ s/[^0-9]//g; ($x eq $columns) or die "invalid number-of-columns: $columns\n"; $w = $width * -1; $c = $columns; while (<>) { chomp; if ( $c-- > 1 ) { printf "%${w}s", $_; next; } $c = $columns; printf "%${w}s\n", $_; } print "\n"; 

尝试

 xargs -n2 printf "%-20s%s\n" 

甚至

 xargs printf "%-20s%s\n" 

如果input不是很大。

如果您的输出由制表符分隔,则快速解决scheme是使用tabs命令来调整tabs的大小。

 tabs 20 keys | awk '{ print $1"\t\t" $2 }'