Agence web » Actualités du digital » Comment utiliser printf dans Bash –

Comment utiliser printf dans Bash –

Shutterstock / gilangtristiano

La mise en forme du texte est un sujet intéressant, en particulier en ce qui concerne Bash. Bien qu’il existe de nombreux outils de formatage de texte, printf est unique et universel. Apprenez tout sur printf dans Bash pour formater votre texte de la bonne manière!

En utilisant printf à Bash

C ++ et d’autres développeurs seront déjà familiarisés avec printf comme un excellent moyen de formater la sortie de texte lors de la programmation. Avoir le même outil disponible dans Bash est un grand avantage. printf vous permet de contrôler et de produire des formats de sortie complexes, comme vous le souhaitez. La page de manuel printf définit printf comme un outil de «formatage et d’impression des données», ce qui est exactement ce qu’il est et fait.

Par exemple, souhaitez-vous imprimer un nombre décimal avec une longueur exacte de 3 octets (ou caractères / nombres) pour la partie entière (la partie précédant le point décimal ou la virgule, selon l’endroit où vous vivez dans le monde et ce que vous locale est) et 2 octets (ou caractères / nombres) pour la partie décimale du nombre? aucun problème, printf peut le faire et bien plus encore. Il pourrait également afficher le texte dans une colonne spécifique de l’écran, etc.

Bien que la syntaxe de printf, pour un nouveau développeur, puisse sembler déroutante ou complexe, elle est en fait assez simple. Il n’y a qu’un ensemble limité de caractères de formatage couramment utilisés qui peuvent être utilisés dans une définition de sortie printf. Jetons un coup d’œil à ceux-ci en premier.

Syntaxe: printf

Ce sont les plus couramment utilisés syntaxe printf idiomes de formatage des nombres:

%d or %i  a signed decimal integer
%u        an unsigned decimal integer
%f        a decimal floating point number
%e        a scientific notation number
%g        will let printf use %e or %f, whichever is shorter
%c        a single character
%s        a string of characters
%%        a literal '%'

Ensuite, il est bon de savoir comment spécifier des options spécifiques en relation avec ces idiomes de formatage. Le format pour spécifier les options pour celles-ci est le suivant:

%[flag(s)][width][.precision][length]number_formatting_idiom

Exemples: printf

Ainsi, par exemple, pour avoir un flotteur d’une largeur de 3 et d’une précision de 2, vous devez spécifier:

%3.2f

Regardons un exemple:

printf "%3.2fn" "100.304" 

Impression d'un flotteur bien formaté avec printf

Simple et simple. Notez que nous aurions pu utiliser une variable au lieu de "100.304":

VAR1=100.304
printf "%3.2fn" ${VAR1}

Impression d'un float formaté avec printf à l'aide d'une variable Bash

Notez également comment nous avons ajouté une nouvelle ligne en utilisant un n séquence de nouvelle ligne. Pour une liste complète des séquences interprétées disponibles, voir man printf. Les plus courants sont n pour nouvelle ligne, t pour tab et \ pour une barre oblique inverse.

Dans le format d’options ci-dessus, nous avons également vu comment nous pouvons spécifier des indicateurs. Il existe un nombre limité de drapeaux communs:

-   Left-justify text (right-justify is the default)
+   Forces the use of a sign, even if positive
' ' A space is inserted if no sign will be used
0   Left-pad the number with zeroes instead of spaces when padding is specified

Ainsi, par exemple, on peut avoir:

VAR1=-100.304
VAR2=100.304
printf "% 3.2ftt%+3.2fn" ${VAR1} ${VAR2}

Impression de nombres négatifs avec printf et formatage

Ici, nous avons utilisé deux variables et séparé la sortie par deux onglets en utilisant deux t séquences d’onglets. Nous avons également inséré un espace (comme un drapeau) entre % et la définition de la largeur. Cela a conduit au nombre négatif de VAR1 à imprimer en utilisant un signe négatif. Si le nombre avait été positif, aucun signe n’aurait été imprimé, et à la place un espace serait imprimé dans la même position.

Enfin, nous avons utilisé le + drapeau et en effet notre numéro est sorti avec un début + signe indépendamment du fait que le nombre est déjà positif et donc (normalement) aucun signe ne serait imprimé.

Alors, comment pouvons-nous nous assurer que nous avons des zéros ou des espaces non significatifs, tout en ayant une longueur spécifique? Premièrement, nous devons nous assurer que la largeur de notre définition est plus longue que le contenu variable, et deuxièmement, nous pouvons utiliser le 0 drapeau pour afficher les zéros non significatifs:

VAR1=-100.304
VAR2=100.304
printf "% 13.2fn%013.2fn%13.2f" ${VAR1} ${VAR2} ${VAR1}

Formatage de sortie pour printf et définition des zéros non significatifs

Dans cet exemple, nous imprimons 3 lignes, séparées deux fois par le n séquence de nouvelle ligne. Nous notons immédiatement que s’il n’y a pas de nouvelle ligne à la fin de la sortie, que notre invite Bash retourne spécifiquement à la fin de notre 3ème ligne de sortie.

Ce n’est peut-être pas un format agréable ou pratique en mode interactif dans le terminal, mais à partir d’un script (pensez par exemple à une séquence comme 1...2...3... qui se construit étape par étape sur l’écran au fur et à mesure de la progression dans le code), cela peut être très pratique.

Dans la deuxième ligne de sortie, nous utilisons le 0 indicateur pour indiquer que nous aimerions utiliser des zéros non significatifs pour VAR2. La sortie donne en effet des zéros non significatifs, jusqu’à la longueur définie.

Dans la première ligne de sortie, nous avons inséré un espace tandis que dans la troisième ligne de sortie (les deux imprimant le VAR1 variable) nous ne l’avons pas fait. La sortie est la même, ce qui est la seule bizarrerie que j’ai jamais trouvée en travaillant avec printf; on s’attendrait à ce qu’il y ait un caractère supplémentaire étant donné le Définition de l’indicateur d’espace printf. Cela reste le même même si nous utiliserions des zéros non significatifs. Il reste également le même si aucune longueur n’est spécifiée.

L’utilisabilité de l’indicateur d’espace peut donc dans certains cas (nombres négatifs) être limitée. Ce n’est pas le cas pour les nombres positifs:

VAR1=100.304
printf "% fn%0fn" ${VAR1} ${VAR1}

Un espace de début en nombres positifs basé sur l'indicateur d'espace spécial

Dans ce cas (nombres positifs), le drapeau de l’espace fonctionne comme prévu, et un espace supplémentaire est inséré dans le cas du premier VAR1 production.

Conclusion

L’utilisation de printf à partir de scripts Bash ou depuis la ligne de commande peut produire une sortie claire et bien définie. Si vous mettez à l’échelle les variables correctement (et peut-être la plage, vérifiez-les avec certitude), printf vous donnera une méthode flexible pour formater la sortie (et la disposition générale de l’écran pour les applications plus grandes) que vous choisissez.

Dans cet article, nous examinons les idiomes de formatage des nombres couramment utilisés, comment définir la largeur de la partie entière et décimale des nombres, et passons en revue les indicateurs les plus couramment utilisés dans printf. Profitez de l’impression de données bien formatées avec printf!

★★★★★