Типичное использованиеjq
jq [options] <jq filter> [file...]
означает, что, например, для того, чтобы красиво распечатать файл, нужно написать
jq -s '.' input.json output.json
Однако по мере <filter>
роста проекта его удобнее хранить на диске как полноценную программу.
Мы можем захотеть сделать это, потому что:
- Мы используем фильтр в нескольких контекстах/файлах и не хотим рисковать, копируя и вставляя.
- Сохранение фильтра в Makefile означает, что нам придется вводить конечные обратные косые черты, что снижает читаемость кода.
- Если нам повезет, в каком-нибудь редакторе может появиться режим, который позволит легче обнаружить едва заметные ошибки в коде.
Лучшее, что можно сделать 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"