ksh + printf , напечатать строку со статистикой

Мне нужно напечатать следующее:

  • нужны умные способы с помощью printf, чтобы напечатать этот пример

    параметр1 ............... значение1
    параметр2 ............... значение2
    параметр3 ......... ...... значение1
    параметр4 ............... значение2

Спасибо


ksh
person yael    schedule 01.06.2010    source источник


Ответы (1)


Это работает в кш93. Я не знаю о более ранних версиях.

Это напечатает данные в столбцах с n точками между ними.

n=10
printf "%s %s %s\n" $column1 $(
    printf '.%.0s' {1..$(($n - ${#column1}))}
) $column2

Вот демонстрация:

n=10; j=8
for i in a ab abc abcd; do
    printf "%s %s %3d\n" $i $(
        printf '.%.0s' {1..$((10 - ${#i}))}
    ) $((j++))
done

И вывод:

a .........   8
ab ........   9
abc .......  10
abcd ......  11

Чуть посложнее и будет делать фокусы:

n=20
string="mnopqrstuvw"
strl=${#string}
k=0
for i in a ab abc abcd abcde abcd abc ab a
do
    j=${string: -$((strl-(k++)))}
    printf "%s %s %s\n" $i $(
        printf '.%.0s' {1..$((n - ${#i} - ${#j}))}
    ) $j
done 

Выход:

a ........ mnopqrstuvw
ab ........ nopqrstuvw
abc ........ opqrstuvw
abcd ........ pqrstuvw
abcde ........ qrstuvw
abcd .......... rstuvw
abc ............ stuvw
ab .............. tuvw
a ................ uvw
person Dennis Williamson    schedule 01.06.2010