鉴于下面的示例json,我需要做的是查找serialnopool中是否存在在serialno中找到的每个值。如果这是TRUE,那么我需要一种方法来对在serialnopool中找到的serialno值进行分组,以及它们对应的行ID。
serialnopool中存在的serialno值 11079851 的示例输出:
11079851:098、798 等,每个serialno值都将在其新行中继续。 遵循示例json:
[
{
"rowid": "098",
"serialno": 11079851,
"serialnopool": 11079851
},
{
"rowid": 110,
"serialno": 11089385,
"serialnopool": 25853201
},
{
"rowid": 118,
"serialno": 11089385,
"serialnopool": 22412115
},
{
"rowid": 798,
"serialno": 11079851,
"serialnopool": 22412115
},
{
"rowid": "",
"serialno": "",
"serialnopool": 5423
},
{
"rowid": "",
"serialno": "",
"serialnopool": 5421312
}
]
如何通过使用jq来实现?
答案 0 :(得分:0)
假设“在serialnopool中存在”是指“在serialnopool值集中至少出现一次”,则以下是一种解决方案,只要您的jq为1.5或更高版本:
map(.serialnopool) as $snp
| (INDEX( group_by(.serialno)[]; .[0].serialno|tostring)
| map_values(map(.rowid))) as $dict
| (map(.serialno) | unique[]) as $sn
| if IN($sn; $snp[])
then "\($sn): " + ($dict[$sn|tostring] | join(", "))
else empty end
此解决方案的主要关注点是字典($ dict),该字典将.serialno|tostring
值映射到相应的.rowid
值。