Comment utiliser awk pour filtrer du texte ou des chaînes en utilisant des actions spécifiques au modèle

Comment utiliser awk pour filtrer du texte ou des chaînes en utilisant des actions spécifiques au modèle

Dans la troisième partie de la série de commandes AWK, nous allons jeter un œil au filtrage du texte ou des chaînes en fonction de modèles spécifiques qu'un utilisateur peut définir.

Parfois, lors du filtrage du texte, vous souhaitez indiquer certaines lignes d'un fichier d'entrée ou des lignes de chaînes en fonction d'une condition donnée ou en utilisant un modèle spécifique qui peut être adapté. Faire cela avec Awk est très facile, c'est l'une des grandes caractéristiques de Awk que vous trouverez utile.

Laissez-nous jeter un coup d'œil à un exemple ci-dessous, disons que vous avez une liste de courses pour les aliments que vous souhaitez acheter, appelés Les prix de la nourriture.liste. Il a la liste suivante des aliments et leurs prix suivants.

$ Cat Food_Prices.liste  Pas d'élément_name Prix de quantité 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 

Et puis, vous voulez indiquer un (*) Connectez-vous sur les aliments 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; ' Les prix de la nourriture.liste 
Imprimer les articles dont le prix est supérieur à 2 $

De la sortie ci-dessus, vous pouvez voir qu'il y a un (*) Signe à la fin des lignes d'avoir des aliments, mangues et Ananas. Si vous vérifiez leurs prix, ils sont au-dessus 2 $.

Dans cet exemple, nous avons utilisé deux motifs utilisés:

  1. la première: / * \ $ [2-9] \.[0-9] [0-9] * / obtient les lignes qui ont le prix de l'alimentation alimentaire supérieur à 2 $ et
  2. la deuxième: / * \ $ [0-1] \.[0-9] [0-9] * / recherche les lignes avec un prix de l'alimentation inférieure à 2 $.

C'est ce qui se passe, il y a quatre champs dans le fichier, lorsque le modèle on rencontre une ligne avec un prix de l'alimentation plus élevé que 2 $, il imprime les quatre champs et un (*) signe à la fin de la ligne comme drapeau.

Le deuxième modèle imprime simplement les autres lignes avec un prix alimentaire inférieur à 2 $ Comme ils apparaissent dans le fichier d'entrée, Les prix de la nourriture.liste.

De cette façon, vous pouvez utiliser des actions spécifiques au modèle pour filtrer les aliments qui sont au prix ci-dessus 2 $, Bien qu'il y ait un problème avec la sortie, les lignes qui ont le (*) Les signes ne sont pas formatés 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 printf Commande qui est une manière longue et ennuyeuse en utilisant 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 $; ' Les prix de la nourriture.liste 
Filtre et imprimer des éléments à l'aide de awk et printf

2. En utilisant 0 $ champ. Awk utilise la variable 0 Pour stocker toute la ligne d'entrée. Ceci est pratique pour résoudre le problème ci-dessus et il est simple et rapide comme suit:

$ awk '/ * $ [2-9] \.[0-9] [0-9] * / print 0 0 "*";  / * $ [0-1] \.[0-9] [0-9] * / print; ' Les prix de la nourriture.liste 
Filtre et imprimer des éléments à l'aide de awk et variable

Conclusion

C'est tout pour l'instant et ce sont des moyens simples de filtrage du texte en utilisant une action spécifique au modèle qui peut aider à signaler des lignes de texte ou des chaînes dans un fichier en utilisant Awk commande.

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 des opérateurs de comparaison à l'aide de AWK Tool.