jq 包括新筛选器中的筛选器的结果



我想在另一个jq过滤器中使用jq过滤器的结果。我已经用xargs做到了,但我觉得它必须是一种更好的方法,运行简单的jq

例:

]$ cat test.json 
{
"prof" : {
"Sma00K279a" : {
"SMLT_RS00075" : {
"Sma00K279a" : {
"SMLT_RS00075" : 1.0
}
},
"SMLT_RS00180#" : {
"Sma00K279a" : {
"SMLT_RS00180#" : 1.0
}
},
"Smlt0558" : {
"Sma00K279a" : {
"Smlt3938" : 1.0
}
}
}
},
"redundant_removed" : {
"Sma00K279a" : {
"SMLT_RS22460" : "SMLT_RS22690",
"Smlt0558" : "Smlt3938",
"Smlt3573" : "Smlt1093"
}
}
}

我的解决方案:

]$ jq '.redundant_removed.Sma00K279a|keys[]' test.json |tr -d "|xargs -tI% jq '.prof.Sma00K279a.%' test.json 
jq .prof.Sma00K279a.SMLT_RS22460 test.json 
null
jq .prof.Sma00K279a.Smlt0558 test.json 
{
"Sma00K279a": {
"Smlt3938": 1
}
}
jq .prof.Sma00K279a.Smlt3573 test.json 
null

我的问题:

有没有更好的方法可以通过单次jq运行来做到这一点?

当然有。

$ jq '.prof.Sma00K279a[.redundant_removed.Sma00K279a|keys[]]' file
null
{
"Sma00K279a": {
"Smlt3938": 1
}
}
null

或者更通用一点:

$ jq '(.prof|keys[]) as $k | .prof[$k][.redundant_removed[$k]|keys[]]' file
null
{
"Sma00K279a": {
"Smlt3938": 1
}
}
null

最新更新