2010-06-01 4 views
0

je dois imprimer les éléments suivants:ksh + printf, imprimer la ligne avec écart de stat

  • ont besoin de moyens intelligents par printf pour imprimer cet exemple

    param1 ......... ...... valeur1
    param2 ............... valeur2
    param3 ............... valeur1
    param .. ............. valeur2

THX

Répondre

1
for i in 1 2 3 4 
do 
    printf "param%d ................. value%d\n" $i $i 
done 
2

Cela fonctionne dans ksh93. Je ne sais pas sur les versions antérieures.

Cela affichera les données dans les colonnes jusqu'à n points entre les

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

Voici une démonstration:

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 

Et la sortie:

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

Un peu plus compliqué et il fera des tours de magie:

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 

sortie:

a ........ mnopqrstuvw 
ab ........ nopqrstuvw 
abc ........ opqrstuvw 
abcd ........ pqrstuvw 
abcde ........ qrstuvw 
abcd .......... rstuvw 
abc ............ stuvw 
ab .............. tuvw 
a ................ uvw