Comment utiliser les instructions de contrôle de flux dans awk - partie 12
- 5012
- 1326
- Rayan Lefebvre
Lorsque vous passez 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 une après l'autre. Mais dans certaines situations, nous voulons peut-être exécuter certaines opérations de filtrage de texte en fonction de certaines conditions, c'est-à-dire que l'approche des instructions de contrôle de flux se déroule.
Utilisez des instructions de contrôle de flux dans awkIl existe diverses instructions de contrôle de flux dans la programmation AWK et celles-ci comprennent:
- Énoncé IF-ELSE
- pour déclaration
- lors de la déclaration
- déclaration de faire
- défaut de rupture
- Continuer la déclaration
- déclaration suivante
- Déclaration de NextFile
- déclaration de sortie
Cependant, pour la portée de cette série, nous exposons: sinon
, pour
, alors que
et faire pendant
affirmations. N'oubliez pas que nous avons déjà parcouru la façon d'utiliser la prochaine instruction dans la partie 6 de cette série awk.
1. La déclaration if-else
La syntaxe attendue du Si déclaration
est similaire à celui de la coquille Si déclaration:
if (condition1) actions1 else actions2
Dans la syntaxe ci-dessus, condition 1
et condition2
sont des expressions awk, et Actions1
et Actions2
sont des commandes awk exécutées lorsque les conditions respectives sont remplies.
Quand condition 1 est satisfait, ce qui signifie que c'est vrai, alors Actions1 est exécuté et le Si déclaration sorties, sinon Actions2 est exécuté.
Le Si déclaration peut également être étendu à un if-else_if-else
déclaration comme ci-dessous:
if (condition1) actions1 else if (conditions2) actions2 else actions3
Pour le formulaire ci-dessus, si condition 1 est vrai, alors Actions1 est exécuté et le Si déclaration sorties, sinon condition2 est évalué et si c'est vrai, alors Actions2 est exécuté et le Si déclaration sorties. Cependant, quand condition2 est faux alors, actions3 est exécuté et le Si déclaration sorties.
Voici un cas au point d'utilisation Si les déclarations, Nous avons une liste de utilisateurs et leur âge stocké dans le fichier, utilisateurs.SMS.
Nous voulons imprimer une déclaration indiquant le nom d'un utilisateur et si l'âge de l'utilisateur est moins ou plus que 25 ans.
[Protégé par e-mail] ~ $ utilisateurs de chats.SMS Sarah L 35 F Aaron Kili 40 m John Doo 20 m Kili Seth 49 M
Nous pouvons écrire un court script shell pour réaliser 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
Ensuite, enregistrez le fichier et sortez, créez l'exécutable du script et exécutez-le comme suit:
$ chmod + x test.sh $ ./test.shot
Échantillon de sortie
L'utilisateur Sarah L est plus de 25 ans, l'utilisateur Aaron Kili est plus de 25 ans, l'utilisateur John Doo a moins de 25 ans. L'utilisateur Kili Seth a plus de 25 ans
2. La déclaration pour
Au cas où vous souhaitez exécuter certaines commandes awk dans une boucle, puis le pour déclaration 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 contre 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.
pour (contre-initialisation; condition de test; contre-infrément) actions
La commande awk suivante montre comment le pour déclaration fonctionne, où nous voulons imprimer les chiffres 0-10:
$ awk 'begin for (compter = 0;<=10;counter++) print counter '
Échantillon de sortie
0 1 2 3 4 5 6 7 8 9 10
3. La déclaration while
La syntaxe conventionnelle du lors de la déclaration est comme suit:
tandis que (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 lors de la déclaration Pour imprimer les chiffres 0-10:
#!/ bin / bash awk 'begin compter = 0; Pendant (compteur<=10) print counter; counter+=1 ;
Enregistrez le fichier et faites l'exécutable de script, puis exécutez-le:
$ chmod + x test.sh $ ./test.shot
Échantillon de sortie
0 1 2 3 4 5 6 7 8 9 10
4. La déclaration do while
C'est une modification du lors de la déclaration ci-dessus, avec la syntaxe sous-jacente suivante:
faire actions while (condition)
La légère différence est que, sous faire pendant, Les commandes awk sont exécutées avant l'évaluation de la condition. En utilisant l'exemple même sous lors de la déclaration Ci-dessus, nous pouvons illustrer l'utilisation de faire pendant en modifiant la commande awk dans le test.shot script comme suit:
#!/ bin / bash awk 'begin compter = 0; do imprimer compteur; compteur + = 1; while (compteur<=10) '
Après avoir modifié le script, enregistrez le fichier et sortez. Ensuite, faites l'exécutable du script et exécutez-le comme suit:
$ chmod + x test.sh $ ./test.shot
Échantillon de sortie
0 1 2 3 4 5 6 7 8 9 10
Conclusion
Ce n'est pas un guide complet concernant les déclarations de contrôle de flux awk, comme je l'avais mentionné plus tôt, il y en a plusieurs autres Instructions de contrôle de flux In Awk.
Néanmoins, cette partie de la série AWK devrait vous donner une idée fondamentale claire de la façon dont l'exécution des commandes AWK peut être contrôlée en fonction de certaines conditions.
Vous pouvez également en exposer davantage sur le reste des instructions de contrôle des flux pour acquérir plus de compréhension sur le sujet. Enfin, dans la section suivante de la série AWK, nous passerons à l'écriture de scripts awk.
- « Anniversaire Debian GNU / Linux A 23 ans de voyage et toujours compter…
- Comment gérer les journaux système (configurer, tourner et importer dans la base de données) dans RHEL 7 - partie 5 »