`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"

関連情報