我正在使用 jq 在大文件中搜索特定结果。我不关心与此特定条件匹配的重复条目,并且处理整个文件需要一段时间。我想做的是打印有关第一个匹配的一些详细信息,然后终止文件上的 jq 命令以节省时间。
即
jq '. | if ... then "print something; exit jq" else ... end'
我查看了http://stedolan.github.io/jq/manual/?#Breakingoutofcontrolstructs但这似乎不太适用
编辑: 我正在解析的文件包含多个 json 对象,一个接一个。它们不在数组中。
这是一种使用最新版本的
first/1
的方法(目前在master中)
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 数据集。
可以使用 jq 1.4 发布后添加的功能来完成所请求的操作。 以下使用 foreach 和 inputs:
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
结果: “再见”