Как напечатать текст в bash и поместить его в пробелы до определенной ширины?
Я повторяю некоторый текст в bash script с переменной в нем и хочу наложить эту переменную, чтобы у нее всегда было подходящее количество пробелов справа, чтобы сохранить остальную часть текста в выровненном.
Вот пример того, что я хочу:
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 ]
Есть ли способ распечатать текст, как мой первый пример?
Ответы
Ответ 1
Используйте -
для выравнивания поля слева.
printf "Echoing random number %-5s [ OK ]" $RAND_NUM
В качестве альтернативы, если вы находитесь в системе Red Hat Linux, есть предопределенные функции, которые будут печатать зеленые ОК и красные сообщения FAILED (те, которые вы видите во время загрузки):
#!/bin/bash
. /etc/init.d/functions
echo -n "Frobbing widget:"
frob_widget && echo_success || echo_failure
echo
Ответ 2
Соберите все свои строки в один 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
Ответ 3
Чтобы расширить ответ sobi3ch: если вы объединяете строки с разделителем (я использую тильду (~)), вы можете вызвать столбец с параметром -s, чтобы разбить текст в этой точке.
Извиняюсь за жестокое обращение с кошкой:
foo.txt :
Echoing random number 1080~[ OK ]
Echoing random number 1080~[ OK ]
Echoing random number 1080~[ Failed ]
тогда:
cat foo.txt | column -s'~'
Echoing random number 1080 [ OK ]
Echoing random number 1080 [ OK ]
Echoing random number 1080 [ Failed ]