【问题标题】:use jq to extract ranking from a list使用 jq 从列表中提取排名
【发布时间】:2022-06-14 13:59:07
【问题描述】:

我想从 json 对象内的元素列表中提取排名,该对象的顺序显示项目在相应类别中的位置。这应该只使用命令行工具来完成。

例如 我有一个包含这 2 个样本的文件(每个 json 对象应该是单行的,但为了便于阅读,这里用缩进解析):

{
    "category":"triathlon",
    "athletes_list":[
        {
            "athlete_name": "Ubain Solt"
        }
        ,
        {
        "athlete_name": "Jon Snow"
        }
        ,
        {
        "athlete_name": "Mickey Mouse"
        }
    ]

}
{
    "category":"swimming",
    "athletes_list":[
        {
        "athlete_name": "Picheal Phelms"
        },
        {
        "athlete_name":"Lacky Kedetie"
        }
    ]
}

并希望作为输出:

{"a":"Ubain Solt", "r":0, "c":"triathlon"}
{"a":"Jon Snow", "r":1, "c":"triathlon"}
{"a": "Mickey Mouse", "r":2, "c":"triathlon"}
{"a": "Picheal Phelms", "r":0, "c":"swimming"}
{"a": "Lacky Kedetie", "r":1, "c":"swimming"}

要求是使用 jq 并且解决方案必须是 1-liner。

【问题讨论】:

    标签: json command-line jq


    【解决方案1】:
    jq -s '.[] | .category as $c | .athletes_list | to_entries[] | ({ a: .value.athlete_name, r: .key, c: $c })' triathlon swimming
    

    将产生:

    {
      "a": "Ubain Solt",
      "r": 0,
      "c": "triathlon"
    }
    {
      "a": "Jon Snow",
      "r": 1,
      "c": "triathlon"
    }
    {
      "a": "Mickey Mouse",
      "r": 2,
      "c": "triathlon"
    }
    {
      "a": "Picheal Phelms",
      "r": 0,
      "c": "swimming"
    }
    {
      "a": "Lacky Kedetie",
      "r": 1,
      "c": "swimming"
    }
    

    “诀窍”是使用to_entries,因此我们可以使用.key 作为“索引”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多