Как напечатать некоторый текст в bash и дополнить его пробелами до определенной ширины? - PullRequest
39 голосов
/ 14 июня 2011

Я повторяю некоторый текст в bash-скрипте с переменной в нем и хочу дополнить эту переменную, чтобы она всегда имела соответствующее количество пробелов вправо, чтобы остальная часть текста была выровнена.

Вот пример того, что я хочу:

Echoing random number 1080    [ OK ]
Echoing random number 443     [ OK ]
Echoing random number 34842   [ OK ]

Числовое значение будет иметь различную длину (вероятно, не более 5 или 6 цифр).

Я знаю, что printf может это сделать, и выровнять переменную вправо, выполнив следующее:

printf "Echoing random number %5s   [ OK ]" $RAND_NUM

Однако это отформатирует текст следующим образом:

Echoing random number  1080   [ OK ]
Echoing random number   443   [ OK ]
Echoing random number 34842   [ OK ]

И, конечно, просто эхо с пробелами не работает:

echo "Echoing random number ${RAND_NUM}   [ OK ]"

Производит это:

Echoing random number 1080   [ OK ]
Echoing random number 443   [ OK ]
Echoing random number 34842   [ OK ]

Есть ли способ напечатать текст, как в моем первом примере?

Ответы [ 2 ]

55 голосов
/ 14 июня 2011

Используйте - для выравнивания поля влево.

printf "Echoing random number %-5s   [ OK ]" $RAND_NUM

В качестве альтернативы, если вы работаете в системе Red Hat Linux, есть предопределенные функции, которые будут выводить зеленый OK и красный FAILED (те, которые вы видите во время загрузки):

#!/bin/bash

. /etc/init.d/functions

echo -n "Frobbing widget:"
frob_widget && echo_success || echo_failure
echo
4 голосов
/ 22 августа 2018

Соберите все свои строки в один var или текстовый файл, затем передайте его по команде column.Итак, это (мой пример файла /tmp/columns.txt)

Echoing random number 1080 [ OK ]
Echoing random number 44332356 [ OK ]
Echoing random number 34842 [ OK ]
Echoing random number 342 [ OK ]

стало таким

Echoing  random  number  1080      [  OK  ]
Echoing  random  number  44332356  [  OK  ]
Echoing  random  number  34842     [  OK  ]
Echoing  random  number  342       [  OK  ]

Пример команды: cat /tmp/columns.txt | column -t

...