满足条件时终止jq处理

时间:2015-07-27 16:20:27

标签: jq

我正在使用jq在大文件中搜索特定结果。我不关心匹配此特定条件的重复条目,并且处理整个文件需要一段时间。我想要做的是打印有关第一个匹配的一些细节,然后在文件上终止jq命令以节省时间。

jq '. | if ... then "print something; exit jq" else ... end'

我调查了http://stedolan.github.io/jq/manual/?#Breakingoutofcontrolstructures,但这似乎并不适用

编辑: 我正在解析的文件包含多个json对象,一个接一个。它们不在阵列中。

2 个答案:

答案 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;