Je voudrais me débarrasser du champ timestamp
ici en utilisant jq processeur JSON.
[
{
"timestamp": 1448369447295,
"group": "employees",
"uid": "elgalu"
},
{
"timestamp": 1448369447296,
"group": "employees",
"uid": "mike"
},
{
"timestamp": 1448369786667,
"group": "services",
"uid": "pacts"
}
]
La liste blanche fonctionnerait également pour moi, c'est-à-dire select uid, group
En fin de compte, ce que j'aimerais vraiment, c'est une liste avec des valeurs uniques comme celle-ci:
employees,elgalu
employees,mike
services,pacts
Si vous souhaitez simplement supprimer les horodatages, vous pouvez utiliser la fonction del()
:
jq 'del(.[].timestamp)' input.json
Cependant, pour obtenir la sortie souhaitée, je n'utiliserais pas la fonction del()
. Puisque vous savez quels champs doivent apparaître dans la sortie, vous pouvez simplement remplir un tableau avec group
et id
, puis utiliser la fonction join()
:
jq -r '.[]|[.group,.uid]|join(",")' input.json
-r
Signifie sortie brute. jq
n'imprimera pas de guillemets autour des valeurs.
Production:
employees,elgalu
employees,mike
services,pacts
Pour mémoire, une alternative serait:
$ jq -r '.[] | "\(.uid),\(.group)"' input.json
(L'approche de liste blanche facilite la réorganisation de la commande, et cette variante facilite la modification de l'espacement, etc.)
L'exemple suivant peut intéresser tous ceux qui souhaitent un CSV sûr (c'est-à-dire même si les valeurs ont des virgules ou des caractères de nouvelle ligne intégrés):
$ jq -r '.[] | [.uid, .group] | @csv' input.json
"elgalu","employees"
"mike","employees"
"pacts","services"