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
- 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...
- 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.
- Amazon Kindle Edition
- German (Langue de Publication)
- Éditeur: MITP Verlags GmbH & Co. KG
- Complete Linux Academy Courses!
- Save videos for offline viewing!
- Use notecards to increase learning!
- English (Langue de Publication)
- Amazon Kindle Edition
- English (Langue de Publication)
- No Starch Press
- Hardcover Book
- English (Langue de Publication)
- Éditeur: No Starch Press
- English (Langue de Publication)
- Éditeur: Addison-Wesley Professional
- English (Langue de Publication)
- Éditeur: No Starch Press