
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:
- Estamos usando el filtro en múltiples contextos/archivos y no queremos correr el riesgo de cortar y pegar.
- Almacenar el filtro en un Makefile significa que tenemos que introducir barras invertidas al final, que disminuyen la legibilidad del código.
- 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 .awk
extensió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 jq
filtros 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"