Was ist ein guter Mechanismus zum Speichern von „jq“-Filtern auf der Festplatte?

Was ist ein guter Mechanismus zum Speichern von „jq“-Filtern auf der Festplatte?

Die typische Verwendung vonjq

jq [options] <jq filter> [file...]

bedeutet, dass man zum Beispiel für die übersichtliche Darstellung einer Datei schreiben würde

jq -s '.' input.json output.json

Wenn es jedoch <filter>wächst, ist es sauberer, es als vollwertiges Programm auf der Festplatte zu speichern.

Dies könnte aus folgenden Gründen sinnvoll sein:

  1. Wir verwenden den Filter in mehreren Kontexten/Dateien und möchten das Risiko des Ausschneidens und Einfügens vermeiden.
  2. Das Speichern des Filters in einem Makefile bedeutet, dass wir nachstehende Backslashes einfügen müssen, die die Lesbarkeit des Codes beeinträchtigen.
  3. Wenn wir Glück haben, verfügen wir in einigen Editoren über einen Modus, mit dem sich subtile Fehler im Code leichter erkennen lassen.

Das Beste, was man damit machen kann awk(was für CSV-Dateien das ist, was jq für JSON-Dateien ist), ist, eine Datei mit einer Erweiterung zu speichern .awk, sie ausführbar zu machen und in die erste Zeile zu schreiben:

#!/usr/bin/awk -f

oder

#!/opt/local/bin/gawk -f

Was ist ein guter Mechanismus zum Speichern jqvon Filtern auf der Festplatte?

Antwort1

Sie können genau das Gleiche tun. Von 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.

Also zum Beispiel:

$ cat myfilter.jq
#!/usr/bin/jq --from-file

.[].foo // empty

und stellen Sie sicher, dass es ausführbar ist

$ chmod +x myfilter.jq

Dann

$ printf '[{"foo": "bar"},{"goo": "bar"},{"foo": "bam"}]' | ./myfilter.jq
"bar"
"bam"

verwandte Informationen