基于条件的jq过滤

时间:2018-03-18 22:09:01

标签: jq

如何根据特定条件使用jq进行过滤?

使用https://stedolan.github.io/jq/tutorial/#result2中的示例,例如,我想按

过滤结果
  • .commit.author.date>=2016
  • .commit.comment_count>=1

所有不符合此类标准的项目都不会出现在最终结果中。

正确的jq表达式是做什么的?谢谢。

1 个答案:

答案 0 :(得分:1)

响应是包含提交信息的对象数组。由于您要过滤该数组,因此您通常需要map/1该数组并使用select/1map(select(...))进行过滤。您只需要提供过滤条件。

map(select(.commit | (.author.date[:4] | tonumber) >= 2016 and .comment_count >= 1))

此特定情况下的日期是iso格式的日期字符串。我假设您想要获得2016年及以后的提交。提取年份部分并进行比较。

(.author.date[:4] | tonumber) >= 2016

然后将其与比较评论计数结合起来。

注意,我首先预测了提交,以尽量减少过滤器中的重复。我可以很容易地把那部分留下来。

map(select((.commit.author.date[:4] | tonumber) >= 2016 and .commit.comment_count >= 1))