Structure de type Case IF avec awk à plusieurs motifs ?
Bonjour à tous :)
Je possède une fichier texte contenant plusieurs mots (pour l'exemple, simplement des lettres)
Code:
1 2
| #fichier_test.txt
a b c d e f g h i j k l m |
Je cherche a faire des traitement (pour l'exemple, un simple affichage) selon les motifs trouvés.
A savoir qu'il faut absolument une combinaison de motifs (l'ordre et la case n'ont pas d'importance) d'ou l'utilisation de awk qui permet d'utiliser l'opérateur ET ;)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #!/bin/bash
FichierDeTest="fichier_test.txt"
# Je chercher le motif 1 ET le motif 2
TestPresence_a_b=$(awk '/a/ && /b/' fichier_test.txt)
#Si la variable n'est pas vide (== résultat de awk), la chaine est trouvé
if [ -n "$TestPresence_a_b" ] ; then
echo "La chaine a b est présente"
fi
# Je chercher le motif 1 ET le motif 2 ET le motif 3
TestPresence_c_e_f=$(awk '/c/ && /e/ && /f/' fichier_test.txt)
#Si la variable n'est pas vide (== résultat de awk), la chaine est trouvé
if [ -n "$TestPresence_c_e_f" ] ; then
echo "La chaine c e f est présente"
fi
# etendre à d'autres cas, exemple
#g h i
#l m |
Pour l'exemple, je n'en ait mis que deux, mais je dois en avoir plus.
Seulement, mon code se répéte déjà :( donc je cherche à faire quelque chose de plus générique. Je me demande si je peut créer une struture qui ressemble au Case If
Merci d'avance de vos suggestions.
Ajout de précisions
J'apporte quelques précisions à ma demande
- je recherche bien des motifs qui sont des mots-clés
- je dois avoir une 50 aine de cas à traiter, qui peuvent avoir certains mots en commun (et non pas la totalité), par exemple a b ; a d e ; c e f; ...
Je dois donc chercher entre 2 et 4 mots-clés pour chaque cas.
- quand je trouve une combinaison de mots-clés, je doit renvoyer une sorte de définition donc du texte. On peut considérer que c'est une sorte de dictionnaire avec, en entrée, des mots-clés dont l'ordre importe peu.
- j'ai d'abord testé par grep avec le | mais le comportement était un OR et pas un AND. Peut-être me suis-je trompé dans la syntaxe ?