首页 > 解决方案 > 根据值中的特定元素对键进行排序

问题描述

我正在尝试创建一个打印最旧条目的哈希的 JQ 过滤器。我是初学者,我似乎无法弄清楚。一个排序列表就足够了,因为我可以通过管道head -1获取最旧的哈希。

我的问题是我不知道如何根据数组中的值进行排序,然后打印数组的键。我可以打印所有的哈希

jq -r '.t | keys[]'

但它不会被排序。

日期在.[26].

这是我尝试过的:

jq -r '.t[] |= sort_by(.[26]) | keys_unsorted[]'

这是我的输入:

    {
      "t": {
        "2C3D7D91DFD0A57CFCA8B7092347B311088D3B6E": [
          "1",
          "0",
          "1",
          "1",
          "Young.Sheldon.S04.1080p.x265-ZMNT",
          "4764367221",
          "1136",
          "1136",
          "4764367221",
          "5201425130",
          "1091",
          "0",
          "0",
          "4194304",
          "",
          "0",
          "0",
          "0",
          "0",
          "0",
          "2",
          "1622459402",
          "0",
          "0",
          "1136",
          "/home/xxxxxxxx/files/Young.Sheldon.S04.1080p.x265-ZMNT",
          "1622421479",
          "2",
          "1",
          "",
          "",
          "4436465131520",
          "1",
          "1"
        ],
        "FAC73275BC376C4C26DFDA41D991D021838DB778": [
          "1",
          "0",
          "1",
          "1",
          "Joshy.2016.NORDIC.1080p.BluRay.REMUX.AVC.DTS-HD.MA.5.1-Danishbits",
          "21160180253",
          "5045",
          "5045",
          "21160180253",
          "4470554624",
          "211",
          "114688",
          "0",
          "4194304",
          "",
          "1",
          "0",
          "1",
          "0",
          "0",
          "2",
          "1622459402",
          "0",
          "0",
          "5045",
          "/home/xxxxxxxx/files/Joshy.2016.NORDIC.1080p.BluRay.REMUX.AVC.DTS-HD.MA.5.1-Danishbits",
          "1622413504",
          "2",
          "1",
          "",
          "",
          "4436465131520",
          "1",
          "1"
        ],
        "671CA27A76DC35E8E9F46723F1F6596A8BC75DA0": [
          "1",
          "0",
          "1",
          "1",
          "Working.Girl.1988.1080p.Bluray.REMUX.AVC.DTS-HD.MA.5.1-4K4U",
          "29680778067",
          "14153",
          "14153",
          "29680778067",
          "12426936320",
          "418",
          "0",
          "0",
          "2097152",
          "",
          "1",
          "0",
          "1",
          "0",
          "0",
          "2",
          "1622459402",
          "0",
          "0",
          "14153",
          "/home/xxxxxxxx/files/Working.Girl.1988.1080p.Bluray.REMUX.AVC.DTS-HD.MA.5.1-4K4U",
          "1622440882",
          "2",
          "1",
          "",
          "",
          "4436465131520",
          "1",
          "1"
        ]
  },
  "cid": 1423760010
}

这是我想要的输出:

FAC73275BC376C4C26DFDA41D991D021838DB778
2C3D7D91DFD0A57CFCA8B7092347B311088D3B6E
671CA27A76DC35E8E9F46723F1F6596A8BC75DA0

或者更好的是单曲

671CA27A76DC35E8E9F46723F1F6596A8BC75DA0

我真的很感激一些建议。

标签: jsonjq

解决方案


如果先转换t为键值对数组会更容易。

.t | to_entries | sort_by(.value[26])[].key
.t | to_entries | max_by(.value[26]) .key

在线演示 - 所有按键
在线演示 - 只有最后一个


推荐阅读