在磁碟上儲存「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"

相關內容