Reputation: 27
Thanks to the folks who helped with my last jq newbie question and got me to an array of objects:
[
{
"any_key":"any_value",
"group_key":"group_val1"
},
{
"any_key":"any_value",
"group_key":"group_val1"
},
{
"any_key":"any_value",
"group_key":"group_val2"
},
{
"any_key":"any_value",
"group_key":"group_val2"
}
]
I've changed the keys and values from the previous question to try and help explain where I'm trying to go with this.
I'm now trying to group the objects based on the value of a shared key. Then, for each array of grouped objects, create a new object where the array is the value of a new key.
I tried grouping with "group_by", but it's still a fair way from where I'm trying to get to and I'm pretty certain I'm missing some key concepts from jq.
[
[
{
"any_key":"any_value",
"group_key":"group_val1"
},
{
"any_key":"any_value",
"group_key":"group_val1"
}
]
]
[
[
{
"any_key":"any_value",
"group_key":"group_val2"
},
{
"any_key":"any_value",
"group_key":"group_val2"
}
]
]
This is where I'm trying (painfully) to get to:
[
{
"new_key1":"group_val1",
"new_key2":[
{
"any_key":"any_value",
"group_key":"group_val1"
},
{
"any_key":"any_value",
"group_key":"group_val1"
}
]
},
{
"new_key1":"group_val2",
"new_key2":[
{
"any_key":"any_value",
"group_key":"group_val1"
},
{
"any_key":"any_value",
"group_key":"group_val2"
}
]
}
]
Not sure I've explained this very clearly...sorry! But any help would be very, very much appreciated!
Upvotes: 1
Views: 365
Reputation: 116680
The filter you're evidently looking for is simpler than you might think:
group_by(.group_key)
| map( {new_key1: .[0].group_key,
new_key2: .} )
Upvotes: 1