GNU/Linux >> Tutoriels Linux >  >> Linux

7 exemples d'opérateurs Awk puissants (opérateurs unaires, binaires, arithmétiques, de chaîne, d'affectation, conditionnels, Reg-Ex Awk)

Cet article fait partie de la série d'exemples de didacticiels Awk en cours. Dans nos articles awk précédents, nous avons discuté de l'impression awk, des variables définies par l'utilisateur awk et des variables intégrées awk.

Comme tout autre langage de programmation, Awk possède également de nombreux opérateurs pour les opérations sur les nombres et les chaînes. Dans cet article, discutons de tous les principaux opérateurs awk .

Il existe deux types d'opérateurs dans Awk.

  1. Opérateur unaire :l'opérateur qui accepte un seul opérande est appelé opérateur unaire.
  2. Opérateur binaire :l'opérateur qui accepte plusieurs opérandes est appelé opérateur binaire.

Opérateur unaire Awk

Opérateur Description
+ Positiver le nombre
Négateur du nombre
++ Incrémentation automatique
Décrémentation automatique

Opérateur binaire Awk

Il existe différents types d'opérateurs binaires disponibles dans Awk. Il est classé en fonction de son utilisation.

Opérateurs arithmétiques Awk

Les opérateurs suivants sont utilisés pour effectuer des calculs arithmétiques.

Opérateur Description
+ Ajout
Soustraction
* Multiplication
/ Division
% Division modulo

Opérateur de chaîne Awk

Pour la concaténation de chaînes, Awk a les opérateurs suivants.

Opérateur Description
(espace) Concaténation de chaînes

Opérateurs d'affectation Awk

Awk a un opérateur d'affectation et un opérateur d'affectation de raccourci comme indiqué ci-dessous.

Opérateur Description
= Affectation
+= Affectation d'ajout de raccourci
-= Affectation de soustraction de raccourci
*= Affectation de multiplication de raccourci
/= Affectation de division de raccourci
%= Raccourci affectation de division modulo

Opérateurs conditionnels Awk

Awk a la liste suivante d'opérateurs conditionnels qui peuvent être utilisés avec des structures de contrôle et des instructions en boucle qui seront couvertes dans l'article à venir.

Opérateur Description
> Est supérieur à
>= Est supérieur ou égal à
< Est inférieur à
<= Est inférieur ou égal à
<= Est inférieur ou égal à
== Est égal à
!= N'est pas égal à
&& Les deux expressions conditionnelles doivent être vraies
|| Toute expression conditionnelle doit être vraie

Opérateur d'expression régulière Awk

Opérateur Description
~ Opérateur de correspondance
 !~ Aucun opérateur de correspondance

Exemples d'opérateur Awk

Passons maintenant en revue quelques exemples qui utilisent des opérateurs awk. Utilisons /etc/passwd comme fichier d'entrée dans ces exemples.

$ cat /etc/passwd
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:102::/home/syslog:/bin/false
hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false
saned:x:110:116::/home/saned:/bin/false
pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false
gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false

Awk Exemple 1 :Compter le nombre total de champs dans un fichier.

Le script awk ci-dessous correspond à toutes les lignes et continue d'ajouter le nombre de champs dans chaque ligne, en utilisant l'opérateur d'affectation d'ajout de raccourci. Le nombre de champs vus jusqu'à présent est conservé dans une variable nommée "total". Une fois l'entrée traitée, le modèle spécial 'END {…}' est exécuté, qui imprime le nombre total de champs.

$ awk -F ':' '{ total += NF }; END { print total }' /etc/passwd
49

Awk Exemple 2 :Compter le nombre d'utilisateurs qui utilisent le shell /bin/sh

Dans le script awk ci-dessous, il correspond au dernier champ de toutes les lignes contenant le modèle /bin/sh. L'expression régulière doit être fermée entre //. Ainsi, toutes les barres obliques (/) doivent être échappées dans l'expression régulière. Lorsqu'une ligne correspond à la variable "n", elle est incrémentée de un. Imprimé la valeur du 'n' dans la section END.

$ awk -F ':' '$NF ~ /\/bin\/sh/ { n++ }; END { print n }' /etc/passwd
2

Awk Exemple 3 : Rechercher les détails de l'utilisateur qui a le USER ID le plus élevé

Le script awk ci-dessous garde la trace du plus grand nombre dans le champ dans la variable 'maxuid' et la ligne correspondante sera stockée dans la variable 'maxline'. Une fois qu'il a parcouru toutes les lignes, il les imprime.

$ awk -F ':'  '$3 > maxuid { maxuid=$3; maxline=$0 }; END { print maxuid, maxline }' /etc/passwd
112 gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false

Awk Exemple 4 :Imprimer les lignes paires

Le script awk ci-dessous traite chaque ligne et vérifie NR % 2 ==0, c'est-à-dire si NR est un multiple de 2. Il effectue l'opération par défaut qui imprime toute la ligne.

$ awk 'NR % 2 == 0' /etc/passwd
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false
pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false

Awk Example 5.Print chaque ligne qui a le même USER ID et GROUP ID

Le script awk ci-dessous imprime la ligne uniquement si $3(USER ID) et $4(GROUP ID) sont égaux. Il vérifie cette condition pour chaque ligne d'entrée, si elle correspond, imprime toute la ligne.

$awk -F ':' '$3==$4' passwd.txt
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh

Awk Exemple 6 :Imprimer les détails de l'utilisateur qui a un USER ID supérieur ou égal à 100 et qui doit utiliser /bin/sh

Dans l'instruction Awk ci-dessous, il y a deux expressions conditionnelles, l'une est l'identifiant de l'utilisateur ($3) supérieur ou égal à 100, et la seconde est le dernier champ doit correspondre à /bin/sh , '&&' est à imprimer uniquement si les deux ci-dessus les conditions sont vraies.

$ awk -F ':' '$3>=100 && $NF ~ /\/bin\/sh/' passwd.txt
libuuid:x:100:101::/var/lib/libuuid:/bin/sh

Awk Exemple 7 :Imprimer les détails de l'utilisateur qui n'a pas les commentaires dans le fichier /etc/passwd

Le script Awk ci-dessous lit chaque ligne et vérifie que le cinquième champ est vide, s'il est vide, il imprime la ligne.

$awk -F ':' '$5 == "" ' passwd.txt
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:102::/home/syslog:/bin/false
saned:x:110:116::/home/saned:/bin/false

Lecture recommandée

Sed et Awk 101 Hacks, par Ramesh Natarajan . Je passe plusieurs heures par jour sur un environnement UNIX / Linux à gérer des fichiers texte (fichiers de données, de configuration et de journalisation). J'utilise Sed et Awk pour tout mon travail de manipulation de texte. Sur la base de mon expérience Sed et Awk, j'ai écrit Sed and Awk 101 Hacks eBook qui contient 101 exemples pratiques sur diverses fonctionnalités avancées de Sed et Awk qui amélioreront votre vie UNIX / Linux. Même si vous utilisez Sed et Awk depuis plusieurs années et que vous n'avez pas lu ce livre, rendez-vous service et lisez ce livre. Vous serez étonné des capacités des utilitaires Sed et Awk.


Linux
  1. 4 Exemples d'instructions Awk If ( if, if else, if else if, :? )

  2. Les tableaux AWK expliqués avec 5 exemples pratiques

  3. 9 puissantes fonctions intégrées Awk pour le numérique

  4. 7 Exemples d'opérateurs Linux Grep OR, Grep AND, Grep NOT

  5. Exemples de commande Linux Objdump (Désassembler un fichier binaire)

Commande AWK sous Linux avec des exemples

Tutoriel de commande Linux/UNIX Awk avec exemples

Commande Linux awk avec 10 exemples

Bash Beginner Series #5 :Utilisation des opérateurs arithmétiques dans les scripts Bash

Tutoriel Regex pour les exemples Linux (Sed &AWK)

6 Exemples d'expressions conditionnelles Bash ( -e, -eq, -z, !=, [, [[ ..)