La mise en forme du texte est un sujet intéressant, surtout quand il s'agit de bash. Bien qu'il existe de nombreux outils pour formater le texte, printf est unique et universel. Apprenez tout sur printf dans Bash pour formater votre texte de la bonne façon !!
À l'aide de imprimer en bas
C ++ et d'autres développeurs connaissent déjà printf comme un excellent moyen de formater la sortie de texte lors de la programmation. Avoir le même outil disponible dans Bash est très avantageux. printf vous permet de contrôler et de produire des formats de sortie complexes, comme tu veux. La page de manuel printf établit printf comme un outil d''impression et de formatage de données', 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 (les personnages / nombres) pour toute la partie (la partie avant la virgule ou la virgule, selon l'endroit où vous vivez dans le monde et votre région) et 2 octets (les personnages / nombres) pour la partie décimale du nombre? Il n'y a pas de problème, printf peut le faire et bien plus encore. Vous pouvez également envoyer le texte à une colonne spécifique sur l'écran, etc.
Même si la syntaxe de printf, pour un nouveau développeur, peut sembler déroutant ou complexe, c'est en fait assez simple. Il n'y a qu'un ensemble limité de caractères de format de travail couramment utilisés qui peuvent être utilisés dans une définition de sortie printf. Jetons un coup d'oeil à ces premiers..
Syntaxe: imprimer
Ce sont les plus utilisés syntaxe printf idiomes de format de nombre:
%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 %% au littéral '%'
Ensuite, il est bon de savoir comment spécifier des options spécifiques dans la liaison avec ces idiomes de formatage. le format de spécification des options pour ceux-ci est le suivant:
%[drapeau(s)][Largeur][.Précision][longueur]number_formatting_idiom
Exemples: imprimer
Ensuite, par exemple, d’avoir un flotteur d’une largeur de 3 et une précision de 2, doit spécifier:
%3.2F
Voyons un exemple:
imprimer "%3.2Fn" "100.304"
Simple et simple. Notez que nous aurions pu utiliser une variable au lieu de "100.304"
:
VAR1=100.304
printf "%3.2Fn" ${VAR1}
Notez également comment nous ajoutons une nouvelle ligne à l’aide d’un n
nouvelle séquence de lignes. Pour une liste complète des séquences interprétées disponibles, voir man printf
. Les plus courants sont n
pour la nouvelle ligne, t
pour l’onglet et pour une barre oblique inverse.
Dans le format des alternatives ci-dessus, nous avons également vu comment nous pouvons spécifier des drapeaux. Il existe un nombre limité de drapeaux communs:
- Texte de justification de gauche (right-justify est la valeur par défaut)
+ Force l’utilisation d’un panneau, even if positive
' ' A space is inserted if no sign will be used
0 Tampon de gauche le nombre avec des zéros au lieu d’espaces lorsque le remplissage est spécifié
A) Oui, par exemple, nous pouvons avoir:
VAR1=-100.304
VAR2=100.304
printf "% 3.2ftt%+3.2fn" ${VAR1} ${VAR2}
Ici, nous utilisons deux variables et séparons la sortie par deux onglets à l'aide de deux t
séquences d'onglets. Nous insérons également un espace (comme un drapeau) Entrez %
et définition de la largeur. Cela a conduit au nombre négatif dans VAR1
imprimer avec un signe négatif. Si le nombre avait été positif, aucun signe n'aurait été imprimé et, en échange, un espace aurait été imprimé dans la même position.
Pour finir on utilise le +
drapeau et, en réalité, notre numéro est délivré avec un +
signe indépendamment du fait que le nombre est déjà positif et, pour cela, (régulièrement) aucun signe ne sera imprimé.
Ensuite, Comment pouvons-nous nous assurer que nous avons des zéros ou des espaces non significatifs, tout en ayant une longueur spécifique? Premier, 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
indicateur pour afficher les zéros non significatifs:
VAR1=-100.304
VAR2=100.304
printf "% 13.2fn3.2fn.2f" ${VAR1} ${VAR2} ${VAR1}
Dans cet exemple, nous imprimons 3 lignes, séparés deux fois par le n
nouvelle séquence de lignes. On remarque immédiatement que s'il n'y a pas de nouvelle ligne à la fin de la sortie, notre indicateur Bash revient spécifiquement à la fin de notre troisième ligne de sortie.
Ce n'est peut-être pas un format sympa ou utile en mode interactif sur le terminal, mais à partir d'un script (pense, par exemple, dans une séquence comme 1...2...3...
qui se construit étape par étape sur l'écran au fur et à mesure que vous parcourez le code) Cela peut être très utile.
Sur la deuxième ligne de départ, nous utilisons le 0
flag pour indiquer que nous aimerions utiliser des zéros non significatifs pour VAR2
. En réalité, la sortie lance des zéros non significatifs, jusqu'à la longueur définie.
Sur la première ligne de départ, nous insérons un espace tandis que dans la troisième ligne de sortie (les deux imprimant le VAR1
variable) nous n'avons pas. La sortie est la même, qui est la seule bizarrerie que j'ai rencontrée en travaillant avec printf
; on s'attendrait à ce qu'il y ait un caractère supplémentaire étant donné la définition d'indicateur d'espace printf. Cela reste le même même si nous utilisons des zéros non significatifs. Il reste également le même si la longueur n'est pas spécifiée.
Pourtant, la facilité d'utilisation du drapeau spatial peut être limitée dans certains cas (nombres négatifs). Ce n'est pas le cas pour les nombres positifs:
VAR1=100.304
printf "% fnn" ${VAR1} ${VAR1}
Dans cette circonstance (nombres positifs), les 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 sur la ligne de commande peut produire une sortie claire et bien établie. Si vous redimensionnez correctement les variables (et peut-être la gamme, vérifiez-les avec certitude), à l'aide de imprimer vous donnera une méthode flexible pour formater la sortie (et la disposition générale de l'écran pour les applications plus importantes) comme tu choisis.
Dans ce billet, nous discutons des idiomes de format de nombre couramment utilisés, comment définir la largeur de la partie entière et décimale des nombres, et nous passons en revue les drapeaux les plus utilisés dans printf. Profitez de l'impression de données bien formatées avec printf!