JQ在第一次匹配后停止



我有一个大文件(大约500兆字节),其中的数据是JSON格式的。

{
"0001": [
"aaaaa",
"qqqqq"
],
"0002": [
"aaaaa"
],
"0003": [
"ccccc"
],
"0004": [
"bbbbb"
]
...
}

我需要从中提取:

aaaaa
qqqqq

目前,我做以下jq -r 'try . "0001" | .[]' ./1.txt,它的工作,但问题是,它需要很长时间,因为搜索继续通过整个文件,而不是在第一次匹配后立即停止。

如果已经找到输入,请告诉我停止进一步查找的方法。我知道有一个first(inputs | ),但是我不明白如何实现这个命令。

如果事先知道相关的键是JSON对象中的第一个键,那么使用@pmf给出的——stream和first/1的解决方案是适用的;否则,它可以被改编如下:

jq --stream -n 'first(fromstream(1 | truncate_stream(inputs|select(.[0][0] =="0001"))))[]' input.json

这适用于示例输入:

jq --null-input --raw-output --stream 'label $out | inputs | if .[0][0] == "0001" then (if length == 2 then .[1] else break $out end) else empty end' file

最新更新