Я сделал табличный отчет о некоторых переменных данных, напечатанных через printf в оболочке.

Project One    | 76   | 80M    | 80M    | 80M 
Project Two    | 46M  | 52M    | 52M    | 52M 
Project Three  | 174  | 171M   | -      | 173M 

Выходные данные здесь вручную. Есть ли способ печати переменных, которые занимают фиксированную ширину?

Например, в первом ряду 76 [пробел], 80M, ... всего три символа ширины с печатью с переменной оболочки.

1 ответ1

0

Если я понял, что вы хотите, это функция, чтобы оставить определенное количество пробелов после указанной строки. Вот:

fix_space() {
    string="$1"
    len="$2"
    perl -e "my \$str = '`printf "$string" | sed "s/'/\\'/g"`'; print \$str.' ' x ($len - length(\$str))"
}
echo "'`fix_space "ololfdsaf" 20`'"
echo "'`fix_space "ololff" 20`'"

Это просто заставляет perl делать всю грязную работу. Строка идет как первый аргумент, а полная длина как второй. Я уверен, что это поможет вам выровнять ваш вывод.

РЕДАКТИРОВАТЬ:

Вы можете сделать это без perl используя только оболочку. Затем вы должны ввести:

printf "'$string`printf ' '%.0s {1..$((len - ${#string}))}`'\n"

Ссылка

http://rosettacode.org/wiki/Repeat_a_string#UNIX_Shell

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .