web-dev-qa-db-fra.com

Comment imprimer du texte en bash et le remplir avec des espaces à une certaine largeur?

Je fais écho à du texte dans un script bash avec une variable, et je veux remplir cette variable afin qu'elle ait toujours la quantité appropriée d'espaces vers la droite pour garder le reste du texte aligné.

Voici un exemple de ce que je veux:

Echoing random number 1080    [ OK ]
Echoing random number 443     [ OK ]
Echoing random number 34842   [ OK ]

La valeur numérique serait de longueur variable (probablement pas plus de 5 ou 6 chiffres).

Je sais que printf peut le faire et aligner à droite la variable en procédant comme suit:

printf "Echoing random number %5s   [ OK ]" $Rand_NUM

Cependant, cela formaterait le texte comme ceci:

Echoing random number  1080   [ OK ]
Echoing random number   443   [ OK ]
Echoing random number 34842   [ OK ]

Et bien sûr, l'écho avec les espaces ne fonctionne pas:

echo "Echoing random number ${Rand_NUM}   [ OK ]"

Produit ceci:

Echoing random number 1080   [ OK ]
Echoing random number 443   [ OK ]
Echoing random number 34842   [ OK ]

Existe-t-il un moyen d'imprimer le texte comme mon premier exemple?

39
PHLAK

Utilisation - pour aligner à gauche un champ.

printf "Echoing random number %-5s   [ OK ]" $Rand_NUM

Alternativement, si vous êtes sur un système Red Hat Linux, il existe des fonctions prédéfinies qui imprimeront les invites vertes OK et rouge ECHEC (celles que vous voyez au démarrage):

#!/bin/bash

. /etc/init.d/functions

echo -n "Frobbing widget:"
frob_widget && echo_success || echo_failure
echo
55
John Kugelman

Collectez toutes vos lignes dans un fichier var ou texte, puis dirigez-le via la commande column. Donc ceci (mon fichier d'exemple /tmp/columns.txt)

Echoing random number 1080 [ OK ]
Echoing random number 44332356 [ OK ]
Echoing random number 34842 [ OK ]
Echoing random number 342 [ OK ]

est devenu ceci

Echoing  random  number  1080      [  OK  ]
Echoing  random  number  44332356  [  OK  ]
Echoing  random  number  34842     [  OK  ]
Echoing  random  number  342       [  OK  ]

Exemple de commande: cat /tmp/columns.txt | column -t

4
sobi3ch