Vérifier si une awk tableau contient une valeur
Avec Perl, vous pouvez vérifier si un tableau contient une valeur
$ perl -e '@foo=(444,555,666); print 555 ~~ @foo ? "T" : "F"'
T
Cependant avec awk, cette commande similaire est en train de vérifier les index de tableau plutôt que de
les valeurs
$ awk 'BEGIN {split("444 555 666", foo); print 555 in foo ? "T" : "F"}'
F
Comment puis-je vérifier si un tableau contient une valeur particulière avec awk?
Je crois que votre seule option est de boucle.
Comme Etan dit, vous avez besoin d'une boucle for. Vous pouvez obtenir un peu souple résultat en créant un nouveau tableau (hash) avec les valeurs clés, par exemple:
Ne pouvez-vous pas simplement utiliser
Vous êtes de droite, plus courte et plus propre, de sorte qu'il devient:
Comme Etan dit, vous avez besoin d'une boucle for. Vous pouvez obtenir un peu souple résultat en créant un nouveau tableau (hash) avec les valeurs clés, par exemple:
awk 'BEGIN { split("444 555 666", foo); for(i=1; i<=length(foo); i++) bar[foo[i]]; print 555 in bar ? "T" : "F" }'
Ne pouvez-vous pas simplement utiliser
for( i in foo ) bar[foo[i]]
à la place?Vous êtes de droite, plus courte et plus propre, de sorte qu'il devient:
awk 'BEGIN { split("444 555 666", foo); for(i in foo) bar[foo[i]]; print 555 in bar ? "T" : "F" }'
.OriginalL'auteur Steven Penny | 2014-11-04
Vous devez vous connecter pour publier un commentaire.
Awk noob ici. J'ai digéré Steven réponse et fini avec cela, espérons-le plus facile à comprendre l'extrait de code ci-dessous. Il y a 2 des problèmes plus subtils:
["value1", "value2"]
, c'est plus comme{0: "value1", 1: "value2"}
.in
vérifie les clés, et il n'y a pas de moyen de vérifier les valeurs.Donc, vous devez convertir votre tableau (qui est en fait un dictionnaire) pour un dictionnaire avec les valeurs clés.
Pour les one-liners:
OriginalL'auteur phunehehe
Basé sur Thor commentaire, cette fonction fait le truc pour moi:
OriginalL'auteur Steven Penny