AWK - Jolie impression
Jusqu'à présent, nous avons utilisé des AWK print et printffonctions pour afficher les données sur la sortie standard. Mais printf est beaucoup plus puissant que ce que nous avons vu auparavant. Cette fonction est empruntée au langage C et est très utile lors de la production d'une sortie formatée. Voici la syntaxe de l'instruction printf -
Syntaxe
printf fmt, expr-list
Dans la syntaxe ci-dessus fmt est une chaîne de spécifications de format et de constantes. expr-list est une liste d'arguments correspondant aux spécificateurs de format.
Séquences d'échappement
Semblable à toute chaîne, le format peut contenir des séquences d'échappement intégrées. Les séquences d'échappement prises en charge par AWK sont discutées ci-dessous -
Nouvelle ligne
L'exemple suivant imprime Hello et World dans des lignes séparées en utilisant le caractère de nouvelle ligne -
Example
[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Hello
World
Onglet horizontal
L'exemple suivant utilise une tabulation horizontale pour afficher un champ différent -
Example
[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'
En exécutant le code ci-dessus, vous obtenez le résultat suivant -
Output
Sr No Name Sub Marks
Onglet vertical
L'exemple suivant utilise une tabulation verticale après chaque champ -
Example
[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Sr No
Name
Sub
Marks
Retour arrière
L'exemple suivant imprime un retour arrière après chaque champ sauf le dernier. Il efface le dernier numéro des trois premiers champs. Par exemple,Field 1 s'affiche comme Field, car le dernier caractère est effacé avec un retour arrière. Cependant, le dernier champField 4 est affiché tel quel, car nous n'avions pas de \b après Field 4.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Field Field Field Field 4
Retour chariot
Dans l'exemple suivant, après avoir imprimé chaque champ, nous faisons un Carriage Return et imprimez la valeur suivante en plus de la valeur imprimée actuelle. Cela signifie que dans la sortie finale, vous ne pouvez voir queField 4, car c'était la dernière chose à être imprimée par-dessus tous les champs précédents.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Field 4
Form Feed
L'exemple suivant utilise le saut de page après l'impression de chaque champ.
Example
[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Sr No
Name
Sub
Marks
Spécificateur de format
Comme dans le langage C, AWK a également des spécificateurs de format. La version AWK de l'instruction printf accepte les formats de spécification de conversion suivants -
% c
Il imprime un seul caractère. Si l'argument utilisé pour%cest numérique, il est traité comme un caractère et imprimé. Sinon, l'argument est supposé être une chaîne et le seul premier caractère de cette chaîne est affiché.
Example
[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'
Output
En exécutant ce code, vous obtenez le résultat suivant -
ASCII value 65 = character A
% d et% i
Il imprime uniquement la partie entière d'un nombre décimal.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Percentags = 80
% e et% E
Il imprime un nombre à virgule flottante de la forme [-] d.dddddde [+ -] dd.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Percentags = 8.066000e+01
le %E utilise le format E au lieu de e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Percentags = 8.066000E+01
%F
Il imprime un nombre à virgule flottante de la forme [-] ddd.dddddd.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Percentags = 80.660000
% g et% G
Utilise la conversion% e ou% f, selon la valeur la plus courte, avec les zéros non significatifs supprimés.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'
Output
En exécutant ce code, vous obtenez le résultat suivant -
Percentags = 80.66
le %G utilise le format %E au lieu de% e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Percentags = 80.66
% o
Il imprime un nombre octal non signé.
Example
[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Octal representation of decimal number 10 = 12
% u
Il imprime un nombre décimal non signé.
Example
[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Unsigned 10 = 10
% s
Il imprime une chaîne de caractères.
Example
[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Name = Sherlock Holmes
% x et% X
Il imprime un nombre hexadécimal non signé. le%X le format utilise des lettres majuscules au lieu de minuscules.
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Hexadecimal representation of decimal number 15 = f
Maintenant, utilisons% X et observez le résultat -
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Hexadecimal representation of decimal number 15 = F
%%
Il imprime un seul % caractère et aucun argument n'est converti.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Percentags = 80%
Paramètres facultatifs avec%
Avec % nous pouvons utiliser les paramètres optionnels suivants -
Largeur
Le champ est rembourré au width. Par défaut, le champ est rempli d'espaces mais lorsque l'indicateur 0 est utilisé, il est complété par des zéros.
Example
[jerry]$ awk 'BEGIN {
num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2
}'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Num1 = 10
Num2 = 20
Zéros de tête
Un zéro non significatif agit comme un indicateur, ce qui indique que la sortie doit être complétée par des zéros au lieu d'espaces. Veuillez noter que cet indicateur n'a d'effet que lorsque le champ est plus large que la valeur à imprimer. L'exemple suivant décrit ceci -
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2
}'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Num1 = -0010
Num2 = 00020
Justification de gauche
L'expression doit être justifiée à gauche dans son champ. Lorsque la chaîne d'entrée est inférieure au nombre de caractères spécifié et que vous voulez qu'elle soit justifiée à gauche, c'est-à-dire en ajoutant des espaces à droite, utilisez un symbole moins (-) immédiatement après le% et avant le nombre.
Dans l'exemple suivant, la sortie de la commande AWK est redirigée vers la commande cat pour afficher le caractère FIN DE LIGNE ($).
Example
[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte
En exécutant ce code, vous obtenez le résultat suivant -
Output
Num = 10 $
Signe de préfixe
Il préfixe toujours les valeurs numériques avec un signe, même si la valeur est positive.
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2
}'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Num1 = -10
Num2 = +20
Hacher
Pour% o, il fournit un zéro non significatif. Pour% x et% X, il fournit respectivement un 0x ou 0X, uniquement si le résultat est différent de zéro. Pour% e,% E,% f et% F, le résultat contient toujours un point décimal. Pour% g et% G, les zéros de fin ne sont pas supprimés du résultat. L'exemple suivant décrit ceci -
Example
[jerry]$ awk 'BEGIN {
printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'
En exécutant ce code, vous obtenez le résultat suivant -
Output
Octal representation = 012
Hexadecimal representation = 0XA