Group JSON by Key
jq -sc 'group_by(.keyNameA)[] | {keyNameA: .[0].keyNameA, keyNameB: map(.keyNameB)}'Optionally, add sort
jq -sc 'group_by(.keyNameA)[] | {keyNameA: .[0].keyNameA, keyNameB: map(.keyNameB) | sort}'Example
Data
{"ip":"24.213.251.77","altName":"a.a"}
{"ip":"24.213.251.77","altName":"b.b"}
{"ip":"126.126.126.126","altName":"c.c"}
{"ip":"126.126.126.126","altName":"f.f"}
{"ip":"126.126.126.126","altName":"shoe.box"}
{"ip":"126.126.126.126","altName":"aaa.aaa"}Command without sort
└─$ cat data | jq -sc 'group_by(.ip)[] | {ip: .[0].ip, altNames: map(.altName)}'
{"ip":"126.126.126.126","altNames":["c.c","f.f","shoe.box","aaa.aaa"]}
{"ip":"24.213.251.77","altNames":["a.a","b.b"]}Command with sort
└─$ cat data | jq -sc 'group_by(.ip)[] | {ip: .[0].ip, altNames: (map(.altName) | sort)}'
{"ip":"126.126.126.126","altNames":["aaa.aaa","c.c","f.f","shoe.box"]}
{"ip":"24.213.251.77","altNames":["a.a","b.b"]}