我怎样才能格式输出一个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可以使用awk
的printf
,但您可能需要查看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 }'