AWK - Exemples de base

Ce chapitre décrit plusieurs commandes AWK utiles et leurs exemples appropriés. Considérez un fichier textemarks.txt à traiter avec le contenu suivant -

1) Amit     Physics   80
2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

Impression d'une colonne ou d'un champ

Vous pouvez demander à AWK d'imprimer uniquement certaines colonnes du champ de saisie. L'exemple suivant illustre ceci -

Exemple

[jerry]$ awk '{print $3 "\t" $4}' marks.txt

En exécutant ce code, vous obtenez le résultat suivant -

Production

Physics   80
Maths     90
Biology   87
English   85
History   89

Dans le fichier marks.txt, la troisième colonne contient le nom du sujet et la quatrième colonne contient les notes obtenues dans un sujet particulier. Imprimons ces deux colonnes à l'aide de la commande d'impression AWK. Dans l'exemple ci-dessus,$3 and $4 représentent respectivement le troisième et le quatrième champs de l'enregistrement d'entrée.

Impression de toutes les lignes

Par défaut, AWK imprime toutes les lignes qui correspondent au modèle.

Exemple

[jerry]$ awk '/a/ {print $0}' marks.txt

En exécutant ce code, vous obtenez le résultat suivant -

Production

2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

Dans l'exemple ci-dessus, nous recherchons un modèle de formulaire a. Lorsqu'une correspondance de modèle réussit, elle exécute une commande à partir du bloc de corps. En l'absence de bloc de corps, une action par défaut est effectuée qui consiste à imprimer l'enregistrement. Par conséquent, la commande suivante produit le même résultat -

Exemple

[jerry]$ awk '/a/' marks.txt

Impression de colonnes par motif

Lorsqu'une correspondance de modèle réussit, AWK imprime l'enregistrement entier par défaut. Mais vous pouvez demander à AWK d'imprimer uniquement certains champs. Par exemple, l'exemple suivant imprime les troisième et quatrième champs lorsqu'une correspondance de modèle réussit.

Exemple

[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt

En exécutant ce code, vous obtenez le résultat suivant -

Production

Maths    90
Biology  87
English  85
History  89

Impression de la colonne dans n'importe quel ordre

Vous pouvez imprimer les colonnes dans n'importe quel ordre. Par exemple, l'exemple suivant imprime la quatrième colonne suivie de la troisième colonne.

Exemple

[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant -

Production

90   Maths
87   Biology
85   English
89   History

Comptage et impression du motif correspondant

Voyons un exemple où vous pouvez compter et imprimer le nombre de lignes pour lesquelles une correspondance de motif a réussi.

Exemple

[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt

En exécutant ce code, vous obtenez le résultat suivant -

Production

Count = 4

Dans cet exemple, nous incrémentons la valeur du compteur lorsqu'une correspondance de motif réussit et nous imprimons cette valeur dans le bloc END. Notez que contrairement aux autres langages de programmation, il n'est pas nécessaire de déclarer une variable avant de l'utiliser.

Impression de lignes de plus de 18 caractères

Imprimons uniquement les lignes qui contiennent plus de 18 caractères.

Exemple

[jerry]$ awk 'length($0) > 18' marks.txt

En exécutant ce code, vous obtenez le résultat suivant -

Production

3) Shyam   Biology   87
4) Kedar   English   85

AWK fournit un length fonction qui renvoie la longueur de la chaîne. $0variable stocke la ligne entière et en l'absence d'un bloc de corps, l'action par défaut est effectuée, c'est-à-dire l'action d'impression. Par conséquent, si une ligne contient plus de 18 caractères, la comparaison est vraie et la ligne est imprimée.