如何在jq中用外层now值减去内层aircraft的seen_pos值
解决jq访问外层now字段计算seen_pos的问题
核心思路
在jq中处理嵌套数组时,先把外层的now字段存入一个变量,之后遍历aircraft数组时直接引用该变量进行计算,替换原seen_pos字段,再结合原有筛选逻辑输出CSV。
具体实现示例
假设你原本的jq筛选输出逻辑类似这样:
.aircraft[] | select(...) | [.field1, .seen_pos, .field3] | @csv
修改后可调整为:
.now as $now | .aircraft[] | select(...) | .seen_pos = ($now - .seen_pos) | [.field1, .seen_pos, .field3] | @csv
关键细节说明
.now as $now:将根节点下的now字段值绑定到变量$now,后续处理数组元素时可直接调用.seen_pos = ($now - .seen_pos):把当前aircraft条目的seen_pos替换为外层now减去原seen_pos的结果- 保留你原有的
select(...)筛选逻辑,只需将变量绑定语句放在最开头
完整测试示例
假设test.json内容如下:
{ "now": 1620000000, "aircraft": [ {"id": 1, "seen_pos": 1619999000, "model": "A320"}, {"id": 2, "seen_pos": 1619998000, "model": "B737"}, {"id": 3, "seen_pos": 1620000500, "model": "C919"} ] }
执行命令:
jq -r '.now as $now | .aircraft[] | select(.model != "C919") | .seen_pos = ($now - .seen_pos) | [.id, .seen_pos, .model] | @csv' test.json
输出结果:
1,1000,"A320" 2,2000,"B737"
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

