json - test - jq option
Excluir columna de salida jq json (2)
Me gustaría deshacerme del campo de timestamp
de timestamp
aquí utilizando el procesador jq JSON.
[
{
"timestamp": 1448369447295,
"group": "employees",
"uid": "elgalu"
},
{
"timestamp": 1448369447296,
"group": "employees",
"uid": "mike"
},
{
"timestamp": 1448369786667,
"group": "services",
"uid": "pacts"
}
]
La lista blanca también funcionaría para mí, es decir, select uid, group
En última instancia, lo que realmente me gustaría es una lista con valores únicos como este:
employees,elgalu
employees,mike
services,pacts
Para el registro, una alternativa sería:
$ jq -r ''.[] | "/(.uid),/(.group)"'' input.json
(El enfoque de la lista blanca facilita la reorganización del orden, y esta variante facilita la modificación del espaciado, etc.)
El siguiente ejemplo puede ser de interés para cualquier persona que desee un CSV seguro (es decir, incluso si los valores tienen comas incrustadas o caracteres de nueva línea):
$ jq -r ''.[] | [.uid, .group] | @csv'' input.json
"elgalu","employees"
"mike","employees"
"pacts","services"
Si solo desea eliminar las marcas de tiempo, puede utilizar la función del()
:
jq ''del(.[].timestamp)'' input.json
Sin embargo, para lograr la salida deseada, no usaría la función del()
. Ya que sabe qué campos deberían aparecer en la salida, simplemente puede rellenar una matriz con group
e id
y luego usar la función join()
:
jq -r ''.[]|[.group,.uid]|join(",")'' input.json
-r
significa salida cruda . jq
no imprimirá comillas alrededor de los valores.
Salida:
employees,elgalu
employees,mike
services,pacts