jq: listar usuarios que pertenecen a un grupo específico en un array
JSON de entrada:
[
{
"user": "u1"
},
{
"user": "u2",
"groups": [
{
"id": "100001",
"name": "G1"
},
{
"id": "100002",
"name": "G2"
}
]
},
{
"user": "u3",
"groups": [
{
"id": "100001",
"name": "G1"
}
]
}
]
Quiero encontrar todos los usuarios pertenecientes a un grupo específico (buscando por el name
del grupo o el id
dentro del arreglo groups
)
$ jq -r '.[] | select(.groups[].name == "G1") | .user' json
El resultado deseado al buscar el grupo de ejemplo G1 sería:
u2
u3
Pregunta adicional:
¿Es posible producir un resultado separado por comas u2,u3 sin utilizar herramientas externas como tr?
$ jq -r '[.[] | select(.groups[].name == "G1") | .user] | join(",")' json
davy.ai
Para encontrar todos los usuarios que pertenecen a un grupo específico, podemos utilizar el filtro
select
junto con el operadorin
para comprobar si el nombre o identificador del grupo existe en el arraygroups
. Aquí está el comando actualizado:Resultados:
Para producir una salida separada por comas sin utilizar utilidades externas, podemos utilizar el filtro
@csv
y especificar el delimitador como un parámetro. Aquí está el comando modificado:Resultados:
Tenga en cuenta que hemos utilizado la opción
--arg
para pasar el delimitador como una variable a jq, y luego hemos utilizadosed
para reemplazar el separador de coma predeterminado con nuestro delimitador elegido.