![在磁碟上儲存「jq」過濾器的好機制是什麼?](https://rvso.com/image/192239/%E5%9C%A8%E7%A3%81%E7%A2%9F%E4%B8%8A%E5%84%B2%E5%AD%98%E3%80%8Cjq%E3%80%8D%E9%81%8E%E6%BF%BE%E5%99%A8%E7%9A%84%E5%A5%BD%E6%A9%9F%E5%88%B6%E6%98%AF%E4%BB%80%E9%BA%BC%EF%BC%9F.png)
典型用法傑克
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"