Подтвердить что ты не робот

Как я могу отформатировать вывод команды 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, или мне нужно использовать что-то еще?

4b9b3361

Ответ 1

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

Ответ 3

В то время как awk printf может использоваться, вы можете захотеть просмотреть pr или (в системах BSDish) rs для форматирования.

Ответ 4

Так как AIX не имеет команды "column", я создал упрощенную script ниже. Это было бы даже короче без редактирования документа и ввода...:)

#!/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";

Ответ 5

Try

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

или даже

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

если вход не очень большой.

Ответ 6

Если ваш вывод разделен на вкладки, быстрым решением было бы использовать команду tabs для настройки размера ваших вкладок.

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