gpt4 book ai didi

json - JQ:计算每组对象的数量,对于输入的一个子集

转载 作者:行者123 更新时间:2023-12-01 00:37:18 24 4
gpt4 key购买 nike

我需要用 JQ 计算每个组中的对象数,但只计算 N 个最近的对象。

示例输入,对于 N=3:

{"modified":"Mon Sep 25 14:20:00 +0000 2018","object_id":1,"group_id":"C"}
{"modified":"Mon Sep 25 14:23:00 +0000 2018","object_id":2,"group_id":"A"}
{"modified":"Mon Sep 25 14:21:00 +0000 2018","object_id":3,"group_id":"B"}
{"modified":"Mon Sep 25 14:22:00 +0000 2018","object_id":4,"group_id":"A"}

预期输出:

{"A",2}
{"B",1}

我什至没有选择一个基于日期的子集来保留对象的结构:这是我设法实现的最好结果:

 [
.modified |= strptime("%a %b %d %H:%M:%S %z %Y") |
.modified |= mktime |
.modified |= strftime("%Y-%m-%d %H:%M:%S")
] |
sort_by(.modified) |
.[] |
{modified, object_id, group_id}

出于某种原因,结果仍未排序。

我也未能将此类列表转换为数组以仅选择 N 个最近的条目。

然后我需要以某种方式计算每组对象的数量。


总的来说,看起来我需要一个非常直观的解释,说明数组和对象列表如何相互转换,以及如何修改它们的某些字段,然后仅提取所需的字段。不幸的是,到目前为止我找到的教程没有帮助。

最佳答案

假设您的输入文件是:

cat file
{"modified":"Mon Sep 25 14:20:00 +0000 2018","object_id":1,"class_id":"C"}
{"modified":"Mon Sep 25 14:23:00 +0000 2018","object_id":2,"class_id":"A"}
{"modified":"Mon Sep 25 14:21:00 +0000 2018","object_id":3,"class_id":"B"}
{"modified":"Mon Sep 25 14:22:00 +0000 2018","object_id":4,"class_id":"A"}

您可以尝试以下方法:

<file jq -s '
[ .[] |
(.modified |= (strptime("%a %b %d %H:%M:%S +0000 %Y") | mktime))
] |
sort_by(.modified) | # sort using converted time
.[-3:] | # take the last 3
group_by(.class_id) | # group ids together
.[] |
{(.[0].class_id): length}' # create the object using the id name and table length
{
"A": 2
}
{
"B": 1
}

请注意,在我的系统上,strptime 的选项 %z 不起作用。所以我用 +0000 替换了它(反正在时间转换中没有用到)。

关于json - JQ:计算每组对象的数量,对于输入的一个子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52497587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com