我正在使用jq在大文件中搜索特定结果。我不关心匹配此特定条件的重复条目,并且处理整个文件需要一段时间。我想要做的是打印有关第一个匹配的一些细节,然后在文件上终止jq命令以节省时间。
即
jq '. | if ... then "print something; exit jq" else ... end'
我调查了http://stedolan.github.io/jq/manual/?#Breakingoutofcontrolstructures,但这似乎并不适用
编辑: 我正在解析的文件包含多个json对象,一个接一个。它们不在阵列中。
答案 0 :(得分:2)
这是一种使用最新版本的first/1
(当前在主版本中)
def first(g): label $out | g | ., break $out;
first(inputs | if .=="100" then . else empty end)
示例:
$ seq 1000000000 | jq -M -Rn -f filter.jq
输出(随后立即终止)
"100"
在这里,我使用seq
代替大型JSON数据集。
答案 1 :(得分:1)
使用在jq 1.4发布后添加的功能,可以执行所请求的操作。以下使用 foreach 和输入:
label $top
| foreach inputs as $line
# state: true means found; false means not yet found
(false;
if . then break $top
else if $line | tostring | test("goodbye") then true else false end
end;
if . then $line else empty end
)
示例:
$ cat << EOF | jq -n -f exit.jq
1
"goodbye"
3
4
EOF
结果: &#34;再见&#34;