【发布时间】:2020-04-13 22:27:08
【问题描述】:
我有一个包含以下结构和未知数量结果的文件:
{
"results": [
[
{
"field": "AccountID",
"value": "5177497"
},
{
"field": "Requests",
"value": "50900"
}
],
[
{
"field": "AccountID",
"value": "pro"
},
{
"field": "Requests",
"value": "251"
}
]
],
"statistics": {
"Matched": 51498,
"Scanned": 8673577,
"ScannedByte": 2.72400814E10
},
"status": "HOLD"
}
{
"results": [
[
{
"field": "AccountID",
"value": "5577497"
},
{
"field": "Requests",
"value": "51900"
}
],
"statistics": {
"Matched": 51498,
"Scanned": 8673577,
"ScannedByte": 2.72400814E10
},
"status": "HOLD"
}
有多个这样的结果被索引为带有结果文件夹的数组。它们不是用逗号分隔的。
我正在尝试使用 jq 在 ZSH 中打印按“请求”排序的“帐户 ID”。我尝试将它们展平并使用:
jq -r '.results[][0] |.value ' 文件名
jq -r '.results[][1] |.value ' 文件名
分别获取帐户 ID 和请求并对其进行排序。我不认为 bash 有可以使用的字典。问题出在文件中,因为字段和值不是键值对,而是两个对。因此,使用上述两行将它们提取到单独的数组中并按第二个数组排序似乎有点太长了。我想知道是否有办法将这两种操作结合起来。 另一种方法是将它们全部组合成一个字符串并按升序排序。 Python 可能有最好的解决方案,但代码需要是 zsh 或 bash 脚本。
欢迎使用 sed、jq 或任何其他 ZSH 支持的编译器的解决方案。如果有办法在 bash 中创建字典,请告诉我。
预计的输出要求只是帐户 ID 与请求编号。
5577497 has 51900 requests
5177497 has 50900 requests
pro has 251 requests
【问题讨论】:
-
请遵循minimal reproducible example 准则。由于该文件包含 JSON 对象流,因此提供具有两个此类对象的示例是有意义的。如果有帮助,可以同时包含(小)有效样本以及可能不是有效 JSON 的有效流的指示性说明。