jq - 获取具有最新日期的对象
jq - Get objects with latest date
Json 看起来像这样:
cat test.json |jq -r ".nodes[].run_data"
{
"id": "1234",
"status": "PASSED",
"penultimate_status": "PASSED",
"end_time":"2022-02-28T09:50:05Z"
}
{
"id": "4321",
"status": "PASSED",
"penultimate_status": "UNKNOWN",
"end_time": "2020-10-14T13:52:57Z"
}
我想获取最新 运行 的“状态”和“end_time”。不幸的是,顺序不固定。意思是最新的 运行 可以排在列表的第一位,也可以排在最后或中间...
使用sort_by
整理项目,然后提取last
项目:
jq '
[.nodes[].run_data]
| sort_by(.end_time) | last
| {status, end_time}
' test.json
{
"status": "PASSED",
"end_time": "2022-02-28T09:50:05Z"
}
要获取其他格式的字段,请将 {status, end_time}
替换为您的格式,例如"\(.end_time): Status \(.status)"
,并设置 -r
标志,因为这不再是 JSON,而是原始文本。
您可以使用 transpose
将每个对象映射到其 end_time。
这里我将end_time
转换为自Unix纪元以来的秒数,并输出具有最大秒值的对象(这是最新的)。
[
[. | map(.end_time | strptime("%Y-%m-%dT%H:%M:%SZ") | mktime), [.[0], .[1]]]
| transpose[]
| .[1] += {secs: .[0]} | .[1]
]
| sort_by(.secs) | last
| {status, end_time}
输出
{
"status": "PASSED",
"end_time": "2022-02-28T09:50:05Z"
}
演示
Json 看起来像这样:
cat test.json |jq -r ".nodes[].run_data"
{
"id": "1234",
"status": "PASSED",
"penultimate_status": "PASSED",
"end_time":"2022-02-28T09:50:05Z"
}
{
"id": "4321",
"status": "PASSED",
"penultimate_status": "UNKNOWN",
"end_time": "2020-10-14T13:52:57Z"
}
我想获取最新 运行 的“状态”和“end_time”。不幸的是,顺序不固定。意思是最新的 运行 可以排在列表的第一位,也可以排在最后或中间...
使用sort_by
整理项目,然后提取last
项目:
jq '
[.nodes[].run_data]
| sort_by(.end_time) | last
| {status, end_time}
' test.json
{
"status": "PASSED",
"end_time": "2022-02-28T09:50:05Z"
}
要获取其他格式的字段,请将 {status, end_time}
替换为您的格式,例如"\(.end_time): Status \(.status)"
,并设置 -r
标志,因为这不再是 JSON,而是原始文本。
您可以使用 transpose
将每个对象映射到其 end_time。
这里我将end_time
转换为自Unix纪元以来的秒数,并输出具有最大秒值的对象(这是最新的)。
[
[. | map(.end_time | strptime("%Y-%m-%dT%H:%M:%SZ") | mktime), [.[0], .[1]]]
| transpose[]
| .[1] += {secs: .[0]} | .[1]
]
| sort_by(.secs) | last
| {status, end_time}
输出
{
"status": "PASSED",
"end_time": "2022-02-28T09:50:05Z"
}
演示