Comment puis-je corriger la largeur en utilisant printf?
Exemple:
C'est le script:
#!/bin/bash OK=$(printf '\t%+50s\n' OK) FAIL=$(printf '\t%+50s\n' FAIL) for i in a aa aaa aaaa aaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaa; do echo "$i $OK" done
Sortie:
a OK aa OK aaa OK aaaa OK aaaaaa OK aaaaaaaaaaaaaaaaa OK aaaaaaaaaaaaaaaaaaaaaaaaaa OK
Je veux quelque chose comme:
a OK aa OK aaa OK aaaa OK aaaaaa OK aaaaaaaaaaaaaaaaa OK aaaaaaaaaaaaaaaaaaaaaaaaaa OK
Utilisez l'approche printf
suivante pour get la sortie requirejse:
#!/bin/bash for i in a aa aaa aaaa aaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaa; do printf '%-50sOK\n' $i done
Sortie de script:
a OK aa OK aaa OK aaaa OK aaaaaa OK aaaaaaaaaaaaaaaaa OK aaaaaaaaaaaaaaaaaaaaaaaaaa OK
OK
– lorsque la string statique est déplacée vers FORMAT ( printf FORMAT [ARGUMENT]
)
$i
– considéré comme un argument printf
Un moyen facile:
pipe votre script à la column -t
$ script.sh | column -t a OK aa OK aaa OK aaaa OK aaaaaa OK aaaaaaaaaaaaaaaaa OK aaaaaaaaaaaaaaaaaaaaaaaaaa OK
Vous n'avez pas utilisé un outil qui formate la sortie et, au fur et à mesure que $i
devient plus large, votre sortie ne parvient pas à s'aligner.
Remplacer
echo "$i $OK"
avec
printf "%-50s %s\n" "$i" "$OK"
(remplacez "foo" par la string réelle).
où
50s
est une string de 50 caractères de largeur fixe, -
(less) left-justify la string. man 3 printf
pour plus de détails sur la string de format.