![Qual é um bom mecanismo para armazenar filtros `jq` no disco?](https://rvso.com/image/192239/Qual%20%C3%A9%20um%20bom%20mecanismo%20para%20armazenar%20filtros%20%60jq%60%20no%20disco%3F.png)
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:
- Estamos usando o filtro em vários contextos/arquivos e não queremos correr o risco de recortar e colar.
- Armazenar o filtro em um Makefile significa que temos que introduzir barras invertidas no final, o que diminui a legibilidade do código.
- 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 .awk
extensã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 jq
filtros 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"