首页 > 解决方案 > 如何将数据保存在 JQ 的变量中?

问题描述

JQ 播放示例 https://jqplay.org/s/wPDeHoMBxS

目标

对于具有不同日期的唯一名称,我有多行 (20) 数据。我想要一行包含名称、第一行的日期和第 20 行的日期。

{"pos":1,"date":"2020-12-04","name":"ABC"}
{"pos":2,"date":"2020-12-03","name":"ABC"}
.
.
.
.
{"pos":20,"date":"2020-11-04","name":"ABC"}

给定示例中的预期输出。

"\"2020-12-04\",2020-11-04,\"ABC\""
"\"2020-12-04\",2020-11-04,\"DEF\""

标签: jq

解决方案


您可以为此使用该group_by()功能。先靠后.name场。尝试一次使用一个管道运行下面的表达式,以可视化每个函数是如何形成的。sort.date

[ inputs ]        | 
group_by(.name)[] | 
sort_by(.date)    | 
[ last, first ]   | 
[ .[0].date, 
  .[1].date, 
  .[0].name 
]                 | 
@csv

jqplay.org上的工作演示

或者如果要求严格查找.pos20 的对象,请执行显式select()

[ inputs ]        | 
group_by(.name)[] | 
sort_by(.date)    | 
map(select(.pos == 1 or .pos == 20)) 
[ .[0].date, 
  .[1].date // "", 
  .[0].name 
]                 | 
@csv

速记// ""更新一个空字符串,以防该.date字段不可用于查找。


推荐阅读