Recherche de site Web

Comment utiliser les instructions de contrôle de flux dans Awk - Partie 12


Lorsque vous passerez en revue tous les exemples Awk que nous avons couverts jusqu'à présent, dès le début de la série Awk, vous remarquerez que toutes les commandes des différents exemples sont exécutées séquentiellement, c'est-à-dire les unes après les autres. Mais dans certaines situations, nous pouvons souhaiter exécuter des opérations de filtrage de texte en fonction de certaines conditions, c'est là qu'intervient l'approche des instructions de contrôle de flux.

Il existe diverses instructions de contrôle de flux dans la programmation Awk, notamment :

  1. instruction if-else
  2. pour déclaration
  3. tandis que l'instruction
  4. déclaration "faire en attendant"
  5. instruction de pause
  6. continuer la déclaration
  7. déclaration suivante
  8. instruction du fichier suivant
  9. instruction de sortie

Cependant, pour le cadre de cette série, nous expliquerons : if-else, for, while et do while instructions. N'oubliez pas que nous avons déjà expliqué comment utiliser l'instruction suivante dans la partie 6 de cette série Awk.

1. L'instruction if-else

La syntaxe attendue de l'if instruction est similaire à celle de l'instruction if du shell :

if  (condition1) {
     actions1
}
else {
      actions2
}

Dans la syntaxe ci-dessus, condition1 et condition2 sont des expressions Awk, et actions1 et actions2 sont des commandes Awk exécutées lorsque le les conditions respectives sont remplies.

Lorsque la condition1 est satisfaite, ce qui signifie qu'elle est vraie, alors actions1 est exécutée et l'instruction if se termine, sinon actions2 est réalisé.

L'instruction if peut également être étendue en une instruction if-else_if-else comme ci-dessous :

if (condition1){
     actions1
}
else if (conditions2){
      actions2
}
else{
     actions3
}

Pour le formulaire ci-dessus, si condition1 est vraie, alors actions1 est exécutée et l'instruction if se termine, sinon condition2 est évalué et si c'est vrai, alors actions2 est exécuté et l'instruction if se termine. Cependant, lorsque la condition2 est fausse, les actions3 sont exécutées et l'instruction if se termine.

Voici un exemple d'utilisation des instructions if, nous avons une liste d'utilisateurs et leurs âges stockés dans le fichier, utilisateurs .txt.

Nous souhaitons imprimer une déclaration indiquant le nom d’un utilisateur et si son âge est inférieur ou supérieur à 25 ans.

aaronkilik@tecMint ~ $ cat users.txt
Sarah L			35    	F
Aaron Kili		40    	M
John  Doo		20    	M
Kili  Seth		49    	M    

Nous pouvons écrire un court script shell pour effectuer notre travail ci-dessus, voici le contenu du script :


#!/bin/bash
awk ' { 
        if ( $3 <= 25 ){
           print "User",$1,$2,"is less than 25 years old." ;
        }
        else {
           print "User",$1,$2,"is more than 25 years old" ; 
}
}'    ~/users.txt

Enregistrez ensuite le fichier et quittez, rendez le script exécutable et exécutez-le comme suit :

chmod +x test.sh
./test.sh
Exemple de sortie
User Sarah L is more than 25 years old
User Aaron Kili is more than 25 years old
User John Doo is less than 25 years old.
User Kili Seth is more than 25 years old

2. La déclaration for

Si vous souhaitez exécuter certaines commandes Awk dans une boucle, alors l'instruction for vous offre un moyen approprié de le faire, avec la syntaxe ci-dessous :

Ici, l'approche est simplement définie par l'utilisation d'un compteur pour contrôler l'exécution de la boucle, vous devez d'abord initialiser le compteur, puis l'exécuter sur une condition de test, si elle est vraie, exécuter les actions et enfin incrémenter le compteur. La boucle se termine lorsque le compteur ne satisfait pas la condition.

for ( counter-initialization; test-condition; counter-increment ){
      actions
}

La commande Awk suivante montre comment fonctionne l'instruction for, où nous voulons imprimer les nombres 0-10 :

awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
Exemple de sortie
0
1
2
3
4
5
6
7
8
9
10

3. L'instruction while

La syntaxe conventionnelle de l'instruction while est la suivante :

while ( condition ) {
          actions
}

La condition est une expression Awk et les actions sont des lignes de commandes Awk exécutées lorsque la condition est vraie.

Vous trouverez ci-dessous un script pour illustrer l'utilisation de l'instruction while pour imprimer les nombres 0-10 :

#!/bin/bash
awk ' BEGIN{ counter=0 ;
         
        while(counter<=10){
              print counter;
              counter+=1 ;
             
}
}  

Enregistrez le fichier et rendez le script exécutable, puis exécutez-le :

chmod +x test.sh
./test.sh
Exemple de sortie
0
1
2
3
4
5
6
7
8
9
10

4. La déclaration do while

Il s'agit d'une modification de l'instruction while ci-dessus, avec la syntaxe sous-jacente suivante :

do {
     actions
}
 while (condition) 

La légère différence est que, sous do while, les commandes Awk sont exécutées avant que la condition ne soit évaluée. En utilisant l'exemple même sous l'instruction while ci-dessus, nous pouvons illustrer l'utilisation de do while en modifiant la commande Awk dans le script test.sh comme suit :

#!/bin/bash

awk ' BEGIN{ counter=0 ;  
        do{
            print counter;  
            counter+=1 ;    
        }
        while (counter<=10)   
} 
'

Après avoir modifié le script, enregistrez le fichier et quittez. Rendez ensuite le script exécutable et exécutez-le comme suit :

chmod +x test.sh
./test.sh
Exemple de sortie
0
1
2
3
4
5
6
7
8
9
10

Conclusion

Ceci n'est pas un guide complet concernant les instructions de contrôle de flux Awk, comme je l'avais mentionné plus tôt, il existe plusieurs autres instructions de contrôle de flux dans Awk.

Néanmoins, cette partie de la série Awk devrait vous donner une idée fondamentale claire de la manière dont l'exécution des commandes Awk peut être contrôlée en fonction de certaines conditions.

Vous pouvez également en dire davantage sur le reste des instructions de contrôle de flux pour mieux comprendre le sujet. Enfin, dans la prochaine section de la série Awk, nous passerons à l'écriture de scripts Awk.