any
é um incorporado filtro que retorna verdadeiro se qualquer item for verdadeiro , e falso caso contrário. --exit-status
/ -e
faz com que jq
saia do 0
se o último a saída não é falsa nem nula.
Se você já classificou o documento para apenas as teclas de seu interesse, como em seu script, basta fazer isso:
previous_command | jq -e 'any( .[] ; . == 0 )'
.[]
extrai todos os valores e any
produzirá true somente se encontrar um zero neles. Como alternativa, [.[]|.==0]|any
ou map(.==0) | any
; escolha o que achar mais claro.
Você também pode fazer tudo de uma só vez, salvando um processo jq
desperdiçado:
jq -e '[to_entries | .[] | select(.key | test("key[0-9][0-9]$")) | .value == 0 ] | any' data.json
Isso seleciona todas as chaves correspondentes e verifica se cada valor é 0, então canaliza a coleta de resultados através de any
, saindo, assim, 0 se houver zeros. Se tiver certeza de que não há NaNs, você também pode multiplicá-los todos com reduce
.