Какой механизм лучше всего подходит для хранения фильтров `jq` на диске?

Какой механизм лучше всего подходит для хранения фильтров `jq` на диске?

Типичное использованиеjq

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

означает, что, например, для того, чтобы красиво распечатать файл, нужно написать

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

Однако по мере <filter>роста проекта его удобнее хранить на диске как полноценную программу.

Мы можем захотеть сделать это, потому что:

  1. Мы используем фильтр в нескольких контекстах/файлах и не хотим рисковать, копируя и вставляя.
  2. Сохранение фильтра в Makefile означает, что нам придется вводить конечные обратные косые черты, что снижает читаемость кода.
  3. Если нам повезет, в каком-нибудь редакторе может появиться режим, который позволит легче обнаружить едва заметные ошибки в коде.

Лучшее, что можно сделать awk(что для CSV-файлов то же, что jq для JSON-файлов), — это сохранить файл с .awkрасширением, сделать его исполняемым и написать в первой строке:

#!/usr/bin/awk -f

или

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

Какой механизм хранения jqфильтров на диске является наиболее эффективным?

решение1

Вы можете сделать то же самое. Из 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.

Так, например:

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

.[].foo // empty

и убедитесь, что он исполняемый

$ chmod +x myfilter.jq

затем

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

Связанный контент