Recherche de site Web

Comment utiliser la commande « suivant » avec Awk sous Linux – Partie 6


Dans cette sixième partie de la série Awk, nous examinerons l'utilisation de la commande next, qui indique à Awk d'ignorer tous les modèles et expressions restants que vous avez fournis, mais de lire à la place le suivant. ligne d'entrée.

La commande next vous aide à éviter d'exécuter ce que j'appellerais des étapes fastidieuses dans l'exécution d'une commande.

Pour comprendre comment cela fonctionne, considérons un fichier appelé food_list.txt qui ressemble à ceci :

No      Item_Name               Price           Quantity
1       Mangoes                 $3.45              5
2       Apples                  $2.45              25
3       Pineapples              $4.45              55
4       Tomatoes                $3.45              25
5       Onions                  $1.45              15
6       Bananas                 $3.45              30

Pensez à exécuter la commande suivante qui signalera les aliments dont la quantité est inférieure ou égale à 20 avec un signe (*) à la fin de chaque ligne :

# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; } $4 > 20 { print $0 ;} ' food_list.txt 

No	Item_Name		Price		Quantity
1	Mangoes			$3.45		   5	*
2	Apples			$2.45              25
3	Pineapples		$4.45              55
4	Tomatoes		$3.45              25 
5	Onions			$1.45              15	*
6	Bananas	                $3.45              30

La commande ci-dessus fonctionne en réalité comme suit :

  1. Tout d'abord, il vérifie si la quantité, quatrième champ de chaque ligne de saisie, est inférieure ou égale à 20. Si une valeur remplit cette condition, elle est imprimée et signalée avec le (*) signe à la fin en utilisant la première expression : $4 <= 20
  2. Deuxièmement, il vérifie si le quatrième champ de chaque ligne d'entrée est supérieur à 20, et si une ligne remplit la condition, elle est imprimée en utilisant l'expression deux : $4 > 20

Mais il y a un problème ici, lorsque la première expression est exécutée, une ligne que nous voulons signaler est imprimée en utilisant : { printf "%s\t%s\n", $0, "**" ; puis dans la même étape, la deuxième expression est également vérifiée, ce qui devient une perte de temps.

Il n'est donc pas nécessaire d'exécuter à nouveau la deuxième expression, $4 > 20 après avoir imprimé les lignes déjà marquées qui ont été imprimées à l'aide de la première expression.

Pour résoudre ce problème, vous devez utiliser la commande next comme suit :

# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; next; } $4 > 20 { print $0 ;} ' food_list.txt

No	Item_Name		Price		Quantity
1	Mangoes			$3.45		   5	*
2	Apples			$2.45              25
3	Pineapples		$4.45              55
4	Tomatoes		$3.45              25 
5	Onions			$1.45              15	*
6	Bananas	                $3.45              30

Après qu'une seule ligne d'entrée soit imprimée en utilisant $4 <= 20 { printf "%s\t%s\n", $0,"*" ; suivant ; }, la commande next incluse aidera à ignorer la deuxième expression $4 > 20 { print $0 ;}, donc l'exécution passe à la ligne de saisie suivante sans avoir à perdre de temps à vérifier si la quantité est supérieure à 20.

La commande suivante est très importante pour écrire des commandes efficaces et si nécessaire, vous pouvez toujours l'utiliser pour accélérer l'exécution d'un script. Préparez-vous pour la prochaine partie de la série où nous examinerons l'utilisation de l'entrée standard (STDIN) comme entrée pour Awk.

J'espère que vous trouverez ce guide utile et que vous pourrez, comme toujours, mettre vos réflexions par écrit en laissant un commentaire dans la section commentaires ci-dessous.