【发布时间】:2020-06-12 17:35:07
【问题描述】:
我有一系列具有相关信号级别的无线接入点。 我想将其减少为具有最高信号的唯一 SSID。
# cat aps.json
{
"AP" : [
{ "SSID" : "Bart", "Signal" : -20 },
{ "SSID" : "Lisa", "Signal" : -19 },
{ "SSID" : "Homer", "Signal" : -91 },
{ "SSID" : "Homer", "Signal" : -92 },
{ "SSID" : "Lisa", "Signal" : -92 },
{ "SSID" : "Lisa", "Signal" : -21 },
{ "SSID" : "Homer", "Signal" : -90 },
{ "SSID" : "Bart", "Signal" : -21 },
{ "SSID" : "Bart", "Signal" : -22 }
]
}
我尝试使用 sort_by 按 Signal 进行排序,这似乎不知道负数。我使用 reverse 将最小的负数放在第一位。然后 unique_by 似乎没有选择第一个元素。
# jq '.AP | sort_by(.Signal) | reverse | unique_by(.SSID)' aps.json
[
{
"SSID": "Bart",
"Signal": -22
},
{
"SSID": "Homer",
"Signal": -92
},
{
"SSID": "Lisa",
"Signal": -19
}
]
似乎选择了流中的最后一个 Bart、Second Homer 和 First Lisa。
这个问题的答案 jq unique_by - Choose remaining element 似乎暗示这已在 jq 的更高版本或至少 1.5 中修复,但我正在运行 1.5
# jq --version
jq-1.5
【问题讨论】: