web-dev-qa-db-fra.com

Imprimer plusieurs valeurs sur la même ligne

J'essaie d'analyser un document JSON et d'imprimer deux valeurs sur la même ligne. Est-il possible de prendre le document suivant:

{
  "fmep": {
    "foo": 112,
    "bar": 234324,
    "cat": 21343423
  }
}

Et recrache:

112 234324

Je peux obtenir les valeurs que je veux mais elles sont imprimées sur des lignes séparées:

$ echo '{ "fmep": { "foo": 112, "bar": 234324, "cat": 21343423 } }' | jq '.fmep|.foo,.bar'

112  
234324

S'il y a un exemple quelque part qui montre comment faire cela, j'apprécierais tout renseignement.

7
Shibby

Le moyen le plus simple dans votre exemple consiste à utiliser Interpolation de chaînes avec l'option -r. par exemple.

echo '{ "fmep": { "foo": 112, "bar": 234324, "cat": 21343423 } }' | \
jq -r '.fmep| "\(.foo) \(.bar)"'

produit

112 234324

Vous pouvez également envisager de placer les valeurs dans un tableau et d’utiliser @tsv p. Ex.

echo '{ "fmep": { "foo": 112, "bar": 234324, "cat": 21343423 } }' | \
jq -r '.fmep | [.foo, .bar] | @tsv'

qui produit des tabulations séparées

112 234324
13
jq170727

Voici la syntaxe utilisant la sortie jointe (-j):

jq -j '.fmep | .foo, " ", .bar, "\n"' payload.json
0
kenorb