Qual é um bom mecanismo para armazenar filtros `jq` no disco?

Qual é um bom mecanismo para armazenar filtros `jq` no disco?

O uso típico dejq

jq [options] <jq filter> [file...]

significa que, por exemplo, para imprimir um arquivo seria escrito

jq -s '.' input.json output.json

no entanto, à medida que <filter>cresce, fica mais fácil armazená-lo em disco, como um programa completo.

Podemos querer fazer isso porque:

  1. Estamos usando o filtro em vários contextos/arquivos e não queremos correr o risco de recortar e colar.
  2. Armazenar o filtro em um Makefile significa que temos que introduzir barras invertidas no final, o que diminui a legibilidade do código.
  3. Se tivermos sorte, poderemos ter um modo em algum editor que facilite a detecção de erros sutis no código.

O melhor que se pode fazer awk(que é para os arquivos CSV o que jq é para os arquivos JSON) é salvar um arquivo com uma .awkextensão, torná-lo executável e escrever na primeira linha:

#!/usr/bin/awk -f

ou

#!/opt/local/bin/gawk -f

Qual é um bom mecanismo para armazenar jqfiltros em disco?

Responder1

Você pode fazer exatamente o mesmo. De man jq:

   ·   -f filename / --from-file filename:

       Read  filter  from  the  file rather than from a command line, like
       awk´s -f option. You can also use ´#´ to make comments.

Então, por exemplo:

$ cat myfilter.jq
#!/usr/bin/jq --from-file

.[].foo // empty

e certifique-se de que é executável

$ chmod +x myfilter.jq

então

$ printf '[{"foo": "bar"},{"goo": "bar"},{"foo": "bam"}]' | ./myfilter.jq
"bar"
"bam"

informação relacionada