我有一个json文件
a.json:
{
"t": 3
}
{
"t": 6
}
{
"t": 13
}
和另一个文件
b.json:
{
"t1": 1,
"t2": 4
}
{
"t1": 7,
"t2": 8
}
{
"t1": 11,
"t2": 13
}
我想从a.json中找到t值,它们位于b.json对象的任何单个范围t1,t2之间。
所以预期的输出是
{
"t": 3
}
{
"t": 13
}
我尝试过
jq --slurpfile a a.json --slurpfile b b.json -n '$a[] | select(.t >= $b[].t1 and .t <= $b[].t2)'
和
jq --slurpfile a a.json --slurpfile b b.json -n '$a[] | select(.t == range($b[].t1, $b[].t2))'
,但是对$b
的同一对象不会进行比较,并且我没有得到预期的输出。
请帮助。
答案 0 :(得分:2)
以下解决方案着眼于效率,还处理b.json定义的间隔重叠的情况:
< a.json jq --slurpfile b b.json '
def check($value):
if any(.[]; .t1 <= $value and $value <= .t2)
then {t:$value}
else empty
end ;
. as $a | $b | check($a.t)
'
特别是:
any
,以便尽快停止搜索适用范围; range
。答案 1 :(得分:0)
您可以使用以下jq
过滤器:
jq --slurpfile a a.json --slurpfile b b.json -n \
'$a[] | [.t] | if inside($b[] | [ range(.t1; .t2+1) ]) then {t:.[]} else empty end'
对于a.json
中的所有值,请查看该值是否属于文件b.json
的数组组成的范围的一部分。