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, des variables intégrées awk et des opérateurs awk.
Dans ce didacticiel awk, examinons les instructions if conditionnelles awk avec des exemples pratiques.
Awk prend en charge de nombreuses instructions conditionnelles pour contrôler le flux du programme. La plupart de la syntaxe des instructions conditionnelles Awk ressemble au langage de programmation "C".
Normalement, l'instruction conditionnelle vérifie la condition avant d'effectuer toute action. Si la condition est vraie, une ou plusieurs actions sont exécutées. De même, une action peut être effectuée si la condition est fausse.
L'instruction conditionnelle commence par le mot-clé appelé "if". Awk prend en charge deux types différents d'instruction if.
- Instruction Awk Simple If
- Instruction Awk If-Else
- Awk If-ElseIf-Ladder
Instruction If simple Awk
Action unique : L'instruction Si simple est utilisée pour vérifier les conditions, si la condition renvoie vrai, elle exécute l'action ou les actions correspondantes.
Syntax: if (conditional-expression) action
- si est un mot-clé
- conditional-expression – expression pour vérifier les conditions
- action - toute instruction awk pour effectuer une action.
Action multiple : Si l'expression conditionnelle renvoie vrai, alors l'action sera exécutée. Si plusieurs actions doivent être effectuées, les actions doivent être placées entre accolades, en les séparant par une nouvelle ligne ou un point-virgule, comme indiqué ci-dessous.
Syntax: if (conditional-expression) { action1; action2; }
Si la condition est vraie, toutes les actions entre accolades seront exécutées dans l'ordre indiqué. Une fois toutes les actions effectuées, il continue d'exécuter les instructions suivantes.
Awk If Else Statement
Dans l'instruction simple awk If ci-dessus, il n'y a pas d'ensemble d'actions dans le cas où la condition est fausse. Dans l'instruction awk If Else, vous pouvez donner la liste des actions à effectuer si la condition est fausse. Si la condition renvoie vrai, l'action 1 sera effectuée, si la condition est fausse, l'action 2 sera effectuée.
Syntax: if (conditional-expression) action1 else action2
Awk a également un opérateur conditionnel, c'est-à-dire opérateur ternaire ( ?:) dont la fonctionnalité est similaire à l'instruction awk If Else. Si l'expression-conditionnelle est vraie, action1 sera exécutée et si l'expression-conditionnelle est fausse, action2 sera exécutée.
Syntax: conditional-expression ? action1 : action2 ;
Awk If Else If échelle
if(conditional-expression1) action1; else if(conditional-expression2) action2; else if(conditional-expression3) action3; . . else action n;
- Si l'expression-conditionnelle1 est vraie, alors l'action1 sera exécutée.
- Si l'expression-conditionnelle1 est fausse, alors l'expression-conditionnelle2 sera vérifiée, si elle est vraie, l'action2 sera exécutée et continue comme ceci. La dernière partie else sera exécutée si aucune des expressions conditionnelles n'est vraie.
Créons maintenant l'exemple de fichier d'entrée contenant les notes des élèves.
$cat student-marks Jones 2143 78 84 77 Gondrol 2321 56 58 45 RinRao 2122 38 37 Edwin 2537 87 97 95 Dayan 2415 30 47
1. Awk If Exemple :Vérifier que toutes les marques existent
$ awk '{ if ($3 =="" || $4 == "" || $5 == "") print "Some score for the student",$1,"is missing";' }' student-marks Some score for the student RinRao is missing Some score for the student Dayan is missing
3 $, 4 $ et 5 $ sont les résultats des tests de l'étudiant. Si le score du test est égal à vide, il lance le message. || l'opérateur doit vérifier que l'une des marques n'existe pas, il doit alerter.
2. Awk If Else Exemple :générer un rapport de réussite/échec basé sur les notes des élèves dans chaque matière
$ awk '{ if ($3 >=35 && $4 >= 35 && $5 >= 35) print $0,"=>","Pass"; else print $0,"=>","Fail"; }' student-marks Jones 2143 78 84 77 => Pass Gondrol 2321 56 58 45 => Pass RinRao 2122 38 37 => Fail Edwin 2537 87 97 95 => Pass Dayan 2415 30 47 => Fail
La condition pour réussir est que toutes les notes du test doivent être supérieures ou égales à 35. Ainsi, tous les résultats du test sont vérifiés s'ils sont supérieurs à 35, puis il imprime toute la ligne et la chaîne "Pass", sinon c'est-à-dire même si l'un des le résultat du test ne remplit pas la condition, il imprime toute la ligne et imprime la chaîne "Fail".
3. Awk If Else If Exemple :Trouvez la moyenne et la note de chaque élève
$ cat grade.awk { total=$3+$4+$5; avg=total/3; if ( avg >= 90 ) grade="A"; else if ( avg >= 80) grade ="B"; else if (avg >= 70) grade ="C"; else grade="D"; print $0,"=>",grade; } $ awk -f grade.awk student-marks Jones 2143 78 84 77 => C Gondrol 2321 56 58 45 => D RinRao 2122 38 37 => D Edwin 2537 87 97 95 => A Dayan 2415 30 47 => D
Dans le script awk ci-dessus, la variable appelée « avg » a la moyenne des trois scores de test. Si la moyenne est supérieure ou égale à 90, la note est A, ou si la moyenne est supérieure ou égale à 80, la note est B, si la moyenne est supérieure ou égale à 70, la note est C. Ou sinon la note est D.
4. Awk Ternary ( ?:) Exemple :concaténer toutes les 3 lignes d'entrée avec une virgule.
$ awk 'ORS=NR%3?",":"\n"' student-marks Jones 2143 78 84 77,Gondrol 2321 56 58 45,RinRao 2122 38 37 Edwin 2537 87 97 95,Dayan 2415 30 47,
Nous avons discuté de la variable intégrée awk ORS plus tôt. Cette variable est ajoutée après chaque ligne qui obtient la sortie. Dans cet exemple, il est changé toutes les 3 lignes d'une virgule à une nouvelle ligne. Pour les lignes 1, 2 c'est une virgule, pour la ligne 3 c'est une nouvelle ligne, pour les lignes 4, 5 c'est une virgule, pour la ligne 6 une nouvelle ligne, etc.
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.