![`jq` フィルターをディスクに保存するための適切なメカニズムは何ですか?](https://rvso.com/image/192239/%60jq%60%20%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E3%82%92%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E9%81%A9%E5%88%87%E3%81%AA%E3%83%A1%E3%82%AB%E3%83%8B%E3%82%BA%E3%83%A0%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
典型的な使用法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"