¿Cuál es un buen mecanismo para almacenar filtros `jq` en el disco?

¿Cuál es un buen mecanismo para almacenar filtros `jq` en el disco?

El uso típico dejq

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

significa que, por ejemplo, para imprimir un archivo de forma bonita se escribiría

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

sin embargo, a medida que <filter>crece, resulta más limpio almacenarlo en el disco, como un programa completo.

Es posible que queramos hacer eso porque:

  1. Estamos usando el filtro en múltiples contextos/archivos y no queremos correr el riesgo de cortar y pegar.
  2. Almacenar el filtro en un Makefile significa que tenemos que introducir barras invertidas al final, que disminuyen la legibilidad del código.
  3. Si tenemos suerte, es posible que tengamos un modo en algún editor que facilite detectar errores sutiles en el código.

Lo mejor que se puede hacer con awk(que es para archivos CSV lo que jq es para archivos JSON) es guardar un archivo con una .awkextensión, hacerlo ejecutable y escribir en la primera línea:

#!/usr/bin/awk -f

o

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

¿Cuál es un buen mecanismo para almacenar jqfiltros en el disco?

Respuesta1

Puedes hacer exactamente lo mismo. 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.

Así por ejemplo:

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

.[].foo // empty

y asegúrese de que sea ejecutable

$ chmod +x myfilter.jq

entonces

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

información relacionada