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