Comment Utiliser La Commande Awk Pour La Manipulation De Texte ?

La commande awk est fondamentalement un langage de script et un puissant outil de manipulation de texte sous Linux. Il porte le nom de ses fondateurs Alfred A ho, Peter W einberger et Brian K ernighan. Awk est populaire en raison de sa capacité à traiter du texte (chaînes) aussi facilement que des nombres.

Il scanne une séquence de lignes d’entrée, ou d’enregistrements, une par une, à la recherche de lignes qui correspondent au modèle. Lorsqu’une correspondance est trouvée, une action peut être effectuée. C’est un langage d’action de modèle.

L’entrée vers awk peut provenir de fichiers, de redirection et de tuyaux ou directement d’une entrée standard.

Terminologie

Passons à quelques termes de base avant de plonger dans le didacticiel. Cela vous permettra de mieux comprendre le concept.

1. Enregistrements

awk perçoit chaque ligne comme un enregistrement.

  • RS est utilisé pour mentionner les séparateurs d’enregistrements. Par défaut, RS est défini sur une nouvelle ligne.
  • NR est la variable qui suit le numéro d’enregistrement. Sa valeur est égale à l’enregistrement en cours de traitement. NR peut être supposé être le numéro de ligne dans le scénario par défaut.

2. Champs

Chaque enregistrement est divisé en champs. Cela signifie que chaque ligne est divisée en champs.

  • FS est le séparateur de champs. Par défaut, FS est défini sur des espaces. Cela signifie que chaque mot est un champ.
  • NF est le nombre de champs dans un enregistrement particulier.

Les champs sont numérotés comme :

  • pour toute la ligne.
  • pour le premier champ.
  • pour le deuxième champ.
  • €n pour le nième champ.
  • €NF pour le dernier champ.
  • €NF-1 pour l’avant-dernier champ.

Format Standard De Awk

Le format standard de la commande awk est :

€ awk ' BIGIN/instructions/ /pattern/ ACTIONS END/instructions' file_name 
  • La paire modèle-action doit être entourée d’un guillemet simple (‘)
  • BEGIN et END sont facultatifs et sont utilisés pour mentionner les actions à effectuer avant et après le traitement de l’entrée.
  • Le modèle représente la condition qui, si elle est remplie, conduit à l’exécution de l’action
  • L’action spécifie l’ensemble précis de commandes à exécuter en cas de correspondance réussie.
  • file_name doit être spécifié si l’entrée provient d’un fichier.

Utilisation De Base De La Commande Awk

awk peut être utilisé pour imprimer un message au terminal en fonction d’un motif dans le texte. Si vous exécutez la commande awk sans aucun motif et juste une seule commande d’impression, awk imprime le message à chaque fois que vous appuyez sur Entrée. Cela se produit parce que la commande awk attend une entrée de l’interface de ligne de commande.

€ awk 'print "Voici comment la commande awk est utilisée pour l'impression"'

Impression awk

Traitement Des Entrées De La Ligne De Commande à L’aide D’awk

Nous avons vu dans l’exemple précédent que si aucune source d’entrée n’est mentionnée, alors awk prend simplement l’entrée de la ligne de commande.

L’entrée sous awk est considérée comme une collection d’enregistrements et chaque enregistrement est en outre une collection de champs. Nous pouvons l’utiliser pour traiter les entrées en temps réel.

€ awk '=="linux" print "C'est incroyable !", '

Ce code recherche le modèle où le troisième mot de la ligne est « linux ». Lorsqu’une correspondance est trouvée, il imprime le message. Ici, nous avons référencé le premier champ de la même ligne. Avant d’aller de l’avant, créons un fichier texte à utiliser comme entrée.

Cela peut être fait en utilisant la commande cat sous Linux.

créer un fichier texte avec cat

Le texte du fichier est :

200 premiers
Deuxième 300
Troisième 150
Quatrième 300
Cinquième 250
Sixième 500
Septième 100
Huit 50
Neuvième 70
Dixième 270 

Il peut s’agir des cotisations en roupies pour différents clients nommés First, Second…et ainsi de suite.

Impression à Partir D’un Fichier à L’aide De Champs

L’entrée d’un fichier peut être imprimée en utilisant awk. Nous pouvons nous référer à différents champs pour imprimer la sortie de manière sophistiquée.

€ awk 'print "doit", ' rec.txt

imprimer awk

et sont utilisés pour faire référence aux champs un et deux respectivement. Ceux-ci dans notre fichier d’entrée sont les premier et deuxième mots de chaque ligne. Nous n’avons mentionné aucun modèle dans cette commande, donc la commande awk exécute l’action sur chaque enregistrement. Le modèle par défaut pour awk est «  » qui correspond à chaque ligne.

Jouer Avec Les Séparateurs Awk

Il existe trois types de séparateurs dans awk.

  • OFS : séparateur de champ de sortie
  • FS : séparateur de champs
  • RS : séparateur d’enregistrements

1. Séparateur De Champ De Sortie (OFS)

Vous pouvez remarquer que par défaut la commande print sépare les champs de sortie par un espace. Cela peut être modifié en changeant OFS.

€ awk 'OFS=" doit " print ' rec.txt

OFS

La même sortie est obtenue que dans le cas précédent. Le séparateur de champ de sortie par défaut a été remplacé par des espaces blancs par « devoir ». Cependant, ce n’est pas la meilleure façon de changer l’OFS. Tous les séparateurs doivent être modifiés dans la section BEGIN de la commande awk.

2. Séparateur De Champ (FS)

Le séparateur de champs peut être modifié en changeant la valeur de FS.

Premier-200
Deuxième-300
Troisième-150
Quatrième-300
Cinquième-250
Sixième-500
Septième-100
Huit-50
Neuvième-70
Dixième-270
€ awk 'FS="-" print ' rec-sep.txt

Vous pouvez remarquer que la première ligne de la sortie est fausse. Il semble que pour le premier enregistrement awk n’ait pas été en mesure de séparer les champs. C’est parce que nous avons mentionné l’instruction qui modifie le séparateur de champ dans la section action. La première section d’action s’exécute après le traitement du premier enregistrement. Dans ce cas, First-200 est lu et traité avec un séparateur de champ comme espace blanc.

Méthode correcte :

€ awk 'BEGIN FS="-" print ' rec_1.txt

Maintenant, nous obtenons la sortie correcte. Le premier enregistrement a été séparé avec succès. Toute instruction placée dans la section BEGIN s’exécute avant le traitement de l’entrée. La section BEGIN est le plus souvent utilisée pour imprimer un message avant le traitement de l’entrée.

3. Séparateur D’enregistrements (RS)

Le troisième type de séparateur est le séparateur d’enregistrements. Par défaut, le séparateur d’enregistrements est défini sur une nouvelle ligne. Le séparateur d’enregistrements peut être modifié en changeant la valeur de RS. Changer RS est utile dans le cas où l’entrée est un fichier CSV (valeurs séparées par des virgules).

Par exemple si l’entrée est :

Premier-200, Deuxième-300, Troisième-150, Quatrième-300, Cinquième-250, Sixième-500, Septième-100, Huit-50, Neuvième-70, Dixième-270 

Il s’agit de la même entrée que ci-dessus, mais dans un format séparé par des virgules.

Nous pouvons traiter un tel fichier en modifiant le champ RS.

€ awk 'BEGIN FS="-" ; RS=","; OFS=" doit Rs. " print ' rec_2.txt

lecture csv

Opérations Booléennes Dans Awk

Les opérations booléennes peuvent être utilisées comme modèles. Différentes valeurs de champ peuvent être utilisées pour effectuer des comparaisons. awk fonctionne comme une commande if-then. Dans nos données, nous pouvons trouver des clients avec plus de Rs. 200 dû.

€ awk '>200 print "doit Rs.",' rec.txt

Cela nous donne la liste en comparant le deuxième champ de chaque enregistrement avec le 200 et en imprimant si la condition est vraie.

Faire Correspondre Les Littéraux De Chaîne à L’aide De La Commande Awk

Comme awk fonctionne avec des champs, nous pouvons l’utiliser à notre avantage. L’exécution de la commande ls -l donne la liste de tous les fichiers du répertoire actuel avec des informations supplémentaires.

ls -l

La commande awk peut être utilisée avec ls -l pour savoir quels fichiers ont été créés au mois de mai. est le champ d’affichage du mois de création du fichier. Nous pouvons l’utiliser et faire correspondre le champ avec la chaîne ‘May’.

€ ls -l | awk '=="Mai" imprimer '

ls -l avec awk

Variables Définies Par L’utilisateur Dans Awk

Pour effectuer des opérations supplémentaires, des variables peuvent être définies dans awk. Par exemple pour calculer la somme dans la liste des personnes ayant une cotisation supérieure à 200, nous pouvons définir une variable somme pour calculer la somme.

€ awk 'BEGIN sum=0 >200 sum=sum+; print ENDprint sum' rec.txt

variable somme

La variable sum est initialisée dans la section BEGIN, mise à jour dans la section action et imprimée dans la section END. La section action ne serait utilisée que si la condition mentionnée dans la section pattern est vraie. Puisque le modèle est vérifié pour chaque ligne, la structure fonctionne comme une boucle avec une mise à jour effectuée à chaque fois que la condition est remplie.

Compter Avec La Commande Awk

La commande awk peut également être utilisée pour compter le nombre de lignes, le nombre de mots et même le nombre de caractères. Commençons par compter le nombre de lignes avec la commande awk.

Compter Le Nombre De Lignes

Le nombre de lignes peut être imprimé en imprimant la variable NR dans la section FIN. NR est utilisé pour stocker le numéro d’enregistrement actuel. Étant donné que la section END est accessible après que tous les enregistrements aient été traités, NR dans la section END contiendrait le nombre total d’enregistrements.

€ awk 'END print NR ' rec.txt

Nombre de lignes

Compter Le Nombre De Mots

Pour obtenir le nombre de mots, NF peut être utilisé. NF est le nombre de champs dans chaque enregistrement. Si NF est totalisé sur tous les enregistrements, le nombre de mots peut être atteint. Dans la commande, c est utilisé pour compter le nombre de mots. Pour chaque ligne, le nombre total de champs de cette ligne est ajouté à c. Dans la section FIN, l’impression c donnerait le nombre total de mots.

€ awk 'BEGIN c=0 c=c+NF ENDprint c' rec.txt

Nombre de mots

Compter Le Nombre De Caractères

Le nombre de caractères pour chaque ligne peut être obtenu en utilisant la fonction de longueur intégrée de awk. est utilisé pour obtenir l’intégralité de l’enregistrement. longueur donnerait le nombre de caractères dans cet enregistrement.

awk ' print "nombre de caractères dans la ligne", NR,"=" longueur ' rec.txt 

Nombre de caractères

Conclusion

Linux Mint 17.2 “Rafaela”
  • Update Manager, It shows more information, it looks better, it feels faster, and...
  • Driver Manager, The Driver Manager is now able to install drivers without a...
  • Login Screen, Multi-monitor support was improved:
  • Language Settings, A new "Language Settings" tool was introduced. It replaces...
  • Menu Improvements, The menu applet received two mintMenu features: Right-click...
Site Athletics A Real Professional in Linux 1 Guaranteed 2 Hoodie Dark Silver
  • Good hoodie with good standards of quality.
  • Wash Cold, Dry Low.
  • The final product is made of 100% cotton.
  • This is a very comfortable hoodie to wear and also perfect as a gift to your...
  • High printing quality as well.
Linux Academy
  • Complete Linux Academy Courses!
  • Save videos for offline viewing!
  • Use notecards to increase learning!
  • English (Langue de Publication)
Promo
Linux All-in-One For Dummies
  • English (Langue de Publication)
  • Éditeur: For Dummies
Promo
The Linux Programming Interface: A Linux and UNIX System Programming Handbook
  • No Starch Press
  • Hardcover Book
  • English (Langue de Publication)
  • Éditeur: No Starch Press
UNIX and Linux System Administration Handbook (5th Edition)
  • English (Langue de Publication)
  • Éditeur: Addison-Wesley Professional
Linux
  • English (Langue de Publication)
  • Éditeur: QuickStudy
Promo
The Linux Command Line, 2nd Edition: A Complete Introduction
  • English (Langue de Publication)
  • Éditeur: No Starch Press