Фіксований простір / ширина друку змінних в оболонці


0

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

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

Вихідний сигнал тут розташований вручну. Чи є спосіб друкувати змінні, що займають фіксовану ширину?

Наприклад, у першому рядку 76 [пробіл], 80М, ... загальна ширина трьох символів із друком із змінною оболонки.

Відповіді:


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


Не будемо називати цю перлину брудною роботою; бо це працює зараз, як я хотів. Я цим скористаюся. Дякую.
Бімаль Пудель

@BimalPoudel, я продовжив відповідь у випадку, якщо ви турбуєтесь про витрату часу. Використання printf - швидше.
theoden
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.