我正在尝试合并数十万个具有单个对象的 JSON 文件。在这个答案的帮助下,我已成功将所有对象作为数组添加到单个对象中。现在,如果特定字段或参数重复,我想在合并期间过滤掉一些对象。类似field 1
两个对象具有相同的值。
这是例子
输入文件1:
[
{
"field 1": 10,
"field 2": 25,
"field 3": 35,
"field 4": 45
}
]
Run Code Online (Sandbox Code Playgroud)
输入文件2:
[
{
"field 1": 15,
"field 2": 25,
"field 3": 35,
"field 4": 45
}
]
Run Code Online (Sandbox Code Playgroud)
输入文件3:
[
{
"field 1": 10,
"field 2": 20,
"field 3": 30,
"field 4": 40
}
]
Run Code Online (Sandbox Code Playgroud)
预期输出:
[
{
"field 1": 10,
"field 2": 25,
"field 3": 35,
"field 4": 45
},
{
"field 1": 15,
"field 2": 25,
"field 3": 35,
"field 4": 45
}
]
Run Code Online (Sandbox Code Playgroud)
field 1
由于值相同,文件 3 对象不会合并
您只需使用该unique_by()
函数,其中jq
需要一个对象数组并将字段名称作为输入来删除重复项
jq -n '[ inputs[] ] | unique_by(."value 1")'
Run Code Online (Sandbox Code Playgroud)
要附加在我的另一个答案之上,以根据一个字段进行唯一选择并通过另一个字段删除对象,您可以执行以下操作。以下代码对排除重复项的对象进行分组"value 1"
,并排除包含以下内容的对象:"value 6"
jq -n '[ [inputs[]] | unique_by(."value 1")[] | select( has("value 6") | not )] '
Run Code Online (Sandbox Code Playgroud)