Comment utiliser la commande 'suivante' avec awk dans Linux - partie 6

Comment utiliser la commande 'suivante' avec awk dans Linux - partie 6

Dans cette sixième partie de la série AWK, nous examinerons l'utilisation suivant Commande, qui raconte Awk Pour ignorer tous les modèles et expressions restants que vous avez fournis, mais lisez plutôt la ligne d'entrée suivante.

Le suivant La commande vous aide à empêcher l'exécution de ce que je qualifierais d'étapes de perte de temps dans une exécution de commande.

Pour comprendre comment cela fonctionne, considérons un fichier appelé aliments.SMS Cela ressemble à ceci:

Articles de la liste des aliments
Pas d'élément_name Quantité de prix 1 Mango 3 $.45 5 2 pommes 2 $.45 25 3 Ananas 4 $.45 55 4 Tomates 3 $.45 25 5 oignons 1 $.45 15 6 bananes 3 $.45 30 

Envisagez d'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 print $ 0;' food_list.SMS Pas d'élément_name Quantité de prix 1 Mango 3 $.45 5 * 2 pommes 2 $.45 25 3 Ananas 4 $.45 55 4 Tomates 3 $.45 25 5 oignons 1 $.45 15 * 6 bananes 3 $.45 30 

La commande ci-dessus fonctionne réellement comme suit:

  1. Premièrement, il vérifie si la quantité, quatrième champ de chaque ligne d'entrée est inférieure ou égale à 20, Si une valeur répond à cette condition, elle est imprimée et signalée avec le (*) Signe à la fin en utilisant l'expression un: 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 répond à la condition, elle est imprimée en utilisant l'expression deux: 4 $> 20

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

Il n'est donc pas nécessaire d'exécuter la deuxième expression, 4 $> 20 encore une fois après l'impression déjà signalée des lignes qui ont été imprimées en utilisant la première expression.

Pour faire face à ce problème, vous devez utiliser le suivant Commande comme suit:

# awk '$ 4 20 print $ 0;' food_list.SMS Pas d'élément_name Quantité de prix 1 Mango 3 $.45 5 * 2 pommes 2 $.45 25 3 Ananas 4 $.45 55 4 Tomates 3 $.45 25 5 oignons 1 $.45 15 * 6 bananes 3 $.45 30 

Une fois une seule ligne d'entrée imprimée en utilisant 4 $ <= 20 printf "% s \ t% s \ n", 0 0, "*"; suivant ; , le suivant La commande incluse aidera à sauter la deuxième expression 4 $> 20 imprimer 0 0;, L'exécution passe donc à la ligne d'entrée suivante sans avoir à perdre de temps à vérifier si la quantité est supérieure à 20.

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

J'espère que vous trouverez comment guider utile et que vous pouvez comme toujours vos pensées par écrit en laissant un commentaire dans la section des commentaires ci-dessous.