我有一个大文件(大约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