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.