Это работает в ksh93. Я не знаю о более ранних версиях.
Это будет печатать данные в столбцах с до 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