JQ avec filtre sur multiple noms.
Résolu/Fermémamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 16 oct. 2023 à 17:10
- JQ avec filtre sur multiple noms.
- Photo filtre 7 gratuit - Télécharger - Retouche d'image
- Les noms des animaux - Télécharger - Études & Formations
- Liste déroulante choix multiple excel - Guide
- Filtre teams - Accueil - Visio
- Les logos et leurs noms - Télécharger - Jeux vidéo
3 réponses
Modifié le 12 oct. 2023 à 11:08
Bonjour,
1) Tu peux faire une substitution avec sed :
#!/bin/bash DBNAME="aa,bbb,cccc" x=$( \ echo $DBNAME \ | sed -e 's/,/", .name=="/g' \ | sed -e 's/^/.name=="/' \ | sed -e 's/$/"/' \ ) echo $x
Avec ces instructions, la variable x est obtenue à partir de $DB_NAME en effectuant les replacements suivants :
- les virgules par ", .name=="
- le début de chaîne (^) par ".name=="
- la fin de chaîne ($) par "
2) Je ne connais pas assez jq pour te dire si on peut mieux faire, mais en tout cas, ça ne me choque pas.
Bonne chance
Modifié le 12 oct. 2023 à 11:17
Merci! :-) mais j'ai mal formulé ma question. Je peux également avoir plus de deux occurrences.
DBNAME="db1,db2,db3,..."
EDIT: J'y suis presque avec le sed ci-dessous (g dans le premier sed).
mais :
jq -r '.data[]? | "\(.instanceName) \(select (.name=="model", .name=="msdb")
=> OK
alors que :
jq -r '.data[]? | "\(.instanceName) \(select ('$x')
=> KO avec
x=.name=="model", .name=="msdb"
Je dois avoir un problème d'interprétation de la variable x dans mon expression.
Modifié le 12 oct. 2023 à 11:26
Bonjour,
- Oui pardon, il manquait effectivement un "g" ligne 6 que j'ai rajouté depuis. Il signifie que la substitution doit être fait autant que fois que possible (pas juste sur la première occurrence).
- Veille dans tes prochains messages à mettre en forme tes extraits de code, comme expliqué ici.
- Pour ton erreur, il y a effectivement des problèmes car certains backslash me paraissent bizarres (mais n'utilisant pas jq, à ce stade, je ne peux pas te dire). Quelle serait la chaîne que tu veux obtenir une fois $x substitué ? L'idéal aussi serait que tu partages un json minimal avec la valeur de DBNAME adéquate et le résultat attendu.
16 oct. 2023 à 10:13
Merci. je ne peux pas me permettre de consommer plus temps sur ce sujet.
ça fonctionne très bien avec x=`echo ...` donc pour le moment, ça me fera ma v1.
Merci pour votre aide. :-)
16 oct. 2023 à 17:10
Oui comme dit dans #5, c'est à peu près la même chose.
12 oct. 2023 à 09:49
Quelle diff entre x=$(echo ) et x=`echo ... ` ?? car ça fonctionne dans le second cas.
Modifié le 12 oct. 2023 à 11:13
Les deux syntaxes ont le même sens.
- L'opérateur $( ... ) est spécifique à bash (le shell généralement utilisé)
- L'opérateur `...` est commun à tous les bash.
Bien qu'il soit moins générique, j'ai tendance à utiliser $(...) sur le forum car par le passé les `...` étaient mal mises en forme (et parfois les gens ne voient pas la différence entre une apostrophe et une backquote.