Maison > Article > Tutoriel système > Méthode de filtrage de modèles pour le texte ou la chaîne à l'aide de awk
Lors du filtrage de texte, vous souhaiterez parfois marquer certaines lignes d'un fichier ou d'une chaîne en fonction d'une condition donnée ou en utilisant un modèle spécifique pouvant correspondre. Il est très facile d'accomplir cette tâche en utilisant awk, et c'est l'une des rares fonctionnalités d'awk qui peut vous aider.
Jetons un coup d'œil à l'exemple suivant. Supposons que vous ayez une liste de courses avec les aliments que vous souhaitez acheter. Son nom est food_prices.list. Les noms des aliments et les prix correspondants qu'elle contient sont les suivants :
$ cat food_prices.list No Item_Name Quantité Prix 1 Mangues 10 2,45 $ 2 Pommes 20 1,50 $ 3 Bananes 5 0,90 $ 4 Ananas 10 3,46 $ 5 Oranges 10 0,78 $ 6 Tomates 5 0,55 $ 7 Oignons 5 0,45 $
Ensuite, vous souhaitez utiliser un symbole (*) pour marquer les aliments dont le prix unitaire est supérieur à 2 $, vous pouvez alors le faire 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
Imprimez les articles dont le prix unitaire est supérieur à 2 $
Dans le résultat ci-dessus, vous pouvez voir qu'il y a une marque (*) à la fin de la ligne contenant la mangue et l'ananas. Si vous vérifiez leur prix unitaire, vous constaterez qu’ils sont effectivement supérieurs à 2 $ l’unité.
Dans cet exemple, nous avons utilisé deux modes :
Le premier modèle : / */$[2-9]/.[0-9][0-9] */ obtiendra les lignes contenant des aliments dont le prix unitaire est supérieur à 2 $.
Le deuxième modèle : /*/$[0-1]/.[0-9][0-9] */ trouvera les lignes où le prix unitaire de la nourriture est inférieur à 2 $.
Que fait exactement la commande ci-dessus ? Ce fichier comporte quatre champs. Lorsque le modèle correspond à une ligne contenant des aliments dont le prix unitaire est supérieur à 2 $, il affichera les quatre champs et marquera la ligne avec un symbole (*) à la fin.
Le deuxième mode affiche simplement les autres lignes contenant des aliments dont les prix unitaires sont inférieurs à 2 $, tels qu'ils apparaissent dans le fichier d'entrée food_prices.list.
De cette façon, vous pouvez utiliser le modèle pour filtrer les produits alimentaires qui coûtent plus de 2 $. Bien qu'il y ait un problème avec le résultat ci-dessus, les lignes avec le symbole (*) ne sont pas formatées comme les autres lignes, ce qui rend le résultat. apparaître Pas assez clair.
Nous avons également vu le même problème dans la deuxième partie de la série awk, mais nous pouvons le résoudre des deux manières suivantes :
1. Vous pouvez utiliser la commande printf comme suit, mais c'est long et ennuyeux :
$ 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
Utilisez Awk et Printf pour filtrer et générer des projets
2. Utilisez le champ 0 $. Awk utilise la variable 0 pour stocker toute la ligne d'entrée. Pour le problème ci-dessus, cette méthode est très pratique, et elle est également simple et rapide :
$ awk '/ */$[2-9]/.[0-9][0-9] */ { print $0 "*" } / */$[0-1]/.[0-9 ][0-9] */ { print ; }' food_prices.list
Utilisez Awk et les variables pour filtrer et afficher les éléments
Conclusion
C'est tout, en utilisant la commande awk, vous pouvez utiliser la correspondance de motifs pour filtrer le texte de plusieurs manières simples, vous aidant ainsi à marquer certaines lignes de texte ou chaînes dans un fichier.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!