jq:如何在单语句中赋值变量并用于select过滤?
解决jq单次调用中引用同JSON内字段的筛选问题
你之前的嵌套jq写法失效,是因为内层jq -r '.city.sunrise'没有接收到JSON输入(curl的输出全传给了外层jq),导致$sunrise变量为空,筛选条件永远不成立。
不需要用--arg传参,直接在jq内部引用同一份JSON里的字段即可,一次调用就能完成筛选:
核心命令
jq -r '(.city.sunrise) as $sunrise | .list[] | select(.dt > $sunrise) | .clouds.all'
完整管道(含awk计算平均值)
curl [你的API接口地址] | jq -r '(.city.sunrise) as $sunrise | .list[] | select(.dt > $sunrise) | .clouds.all' | awk '{sum+=$1; count++} END {print sum/count}'
逻辑说明
- 先把JSON中的
.city.sunrise值存入jq内部变量$sunrise - 遍历
.list数组,筛选出.dt大于$sunrise的元素 - 提取符合条件元素的
.clouds.all字段输出,再传给awk计算平均值
内容的提问来源于stack exchange,提问作者Lorccan
相关产品推荐
相关产品推荐

