典型用法杰克
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"