Comment utiliser awk pour filtrer du texte à l’aide d’actions spécifiques à un modèle
Dans la troisième partie de la série de commandes awk suivante, nous allons examiner le filtrage du texte ou des chaînes de caractères en fonction de modèles spécifiques qu’un utilisateur peut définir.
Parfois, lors du filtrage de texte, vous souhaitez indiquer certaines lignes d’un fichier d’entrée ou des lignes de chaînes basées sur une condition donnée ou à l’aide d’un modèle spécifique qui peut être mis en correspondance. Faire cela avec Awk est très facile, c’est l’une des grandes fonctionnalités d’Awk que vous trouverez utile.
Jetons un coup d’œil à un exemple ci-dessous, disons que vous avez une liste de courses pour les produits alimentaires que vous souhaitez acheter, appelée food_prices.list.
Il a la liste suivante de produits alimentaires et leurs prix.
cat food_prices.list
No Item_Name Quantity Price
1 Mangoes 10 $2.45
2 Apples 20 $1.50
3 Bananas 5 $0.90
4 Pineapples 10 $3.46
5 Oranges 10 $0.78
6 Tomatoes 5 $0.55
7 Onions 5 $0.45
Et ensuite, vous souhaitez indiquer un signe (*) sur les produits alimentaires dont le prix est supérieur à 2 $, cela peut être fait en exécutant la commande suivante :
awk '/ *$[2-9]\.[0-9][0-9] */ { print $1, $2, $3, $4, "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list
D’après la sortie ci-dessus, vous pouvez voir qu’il y a un signe (*) à la fin des lignes contenant des produits alimentaires, des mangues et des ananas. Si vous vérifiez leurs prix, ils sont supérieurs à 2 $.
Dans cet exemple, nous avons utilisé deux modèles :
- Le premier :
/ *\$[2-9]\.[ 0-9][0-9] */récupère les lignes dont le prix des produits alimentaires est supérieur à 2 $ et - le second :
/*\$[0-1]\.[ 0-9][0-9] */recherche les lignes dont le prix des produits alimentaires est inférieur à 2 $.
C’est ce qui se passe, il y a quatre champs dans le fichier, lorsque le modèle un rencontre une ligne avec un prix d’aliment supérieur à 2 $, il imprime les quatre champs et un signe (*) à la fin de la ligne comme un drapeau.
Le deuxième modèle imprime simplement les autres lignes avec les prix des aliments inférieurs à 2 $ tels qu’ils apparaissent dans le fichier d’entrée, food_prices.list.
De cette façon, vous pouvez utiliser des actions spécifiques au modèle pour filtrer les aliments dont le prix est supérieur à 2 $, bien qu’il y ait un problème avec la sortie, les lignes qui ont le signe (*) ne sont pas formatées comme le reste des lignes, ce qui rend la sortie pas assez claire.
Nous avons vu le même problème dans la partie 2 de la série awk, mais nous pouvons le résoudre de deux manières :
1. En utilisant la commande printf, ce qui est un moyen long et ennuyeux d’utiliser la commande ci-dessous :
$ awk '/ *$[2-9]\.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s\n", $1, $2, $3, $4 "*" ; } / *$[0-1]\.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s\n", $1, $2, $3, $4; }' food_prices.list
2. Utilisation du champ $0. Awk utilise la variable 0 pour stocker toute la ligne d’entrée. C’est pratique pour résoudre le problème ci-dessus et c’est simple et rapide comme suit :
$ awk '/ *$[2-9]\.[0-9][0-9] */ { print $0 "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list
Conclusion
C’est tout, pour l’instant, ce sont des moyens simples de filtrer le texte à l’aide d’une action spécifique au motif qui peut aider à marquer des lignes de texte ou des chaînes dans un fichier à l’aide de la commande Awk.
Pour ceux qui recherchent une ressource complète, nous avons compilé tous les articles de la série Awk dans un livre, qui comprend 13 chapitres et s’étend sur 41 pages, couvrant à la fois l’utilisation de base et avancée d’Awk avec des exemples pratiques.
| Nom du produit | Prix | Acheter |
|---|---|---|
| eBook : Présentation du guide de démarrage Awk pour les débutants | 8,99 $ | [Acheter maintenant] |
J’espère que vous trouverez cet article utile et n’oubliez pas de lire la prochaine partie de la série qui se concentrera sur l’utilisation d’opérateurs de comparaison à l’aide de l’outil awk.


