Wie fügt man eine Kopfzeile zum CSV-Export in jq hinzu?

8

Ich nehme einen modifizierten Befehl aus dem jq Tutorial :

%Vor%

Was macht csv gut, aber die Kopfzeilen fehlen:

%Vor%

Wie kann ich die Kopfzeile (in diesem Fall message,name ) oben hinzufügen? (Ich weiß, dass es manuell möglich ist, aber wie geht es in jq ?)

    
Anton Tarasenko 03.05.2015, 15:21
quelle

3 Antworten

6

Basierend auf Antons Kommentaren zu Jeff Mercados Antwort erhält dieser Ausschnitt die Schlüsselnamen der Eigenschaften des ersten Elements und gibt sie als Array vor den Zeilen aus und verwendet sie als Header. Wenn verschiedene Zeilen unterschiedliche Eigenschaften haben, funktioniert es nicht gut. dann wieder, auch nicht die resultierende CSV.

map({message: .commit.message, name: .commit.committer.name}) | (.[0] | to_entries | map(.key)), (.[] | [.[]]) | @csv

    
Noemi Lapresta 04.05.2015, 14:09
quelle
7

Fügen Sie einfach den Header-Text in einem Array vor den Werten hinzu.

%Vor%     
Jeff Mercado 03.05.2015 16:23
quelle
0

Obwohl ich voll und ganz erkannt habe, dass OP nach einer rein jq Antwort gesucht hat, habe ich diese Frage nach any Antwort gesucht. Also, lass mich eine anbieten, die ich für andere wie mich gefunden habe (und für nützlich befunden habe).

  1. sudo apt install moreutils - wenn Sie sie noch nicht haben. Moreutils Website .
  2. echo "Any, column, name, that, is, not, in, your, json, object" | cat - your.csv | sponge your.csv

Nachteile: erfordert moreutils package, ist nicht nur jq -anfällig, daher würden manche verständlicherweise weniger elegant sagen.

Vorteile: Sie wählen Ihre Header, nicht Ihre JSON-Schlüssel. Auch pure jq Wege werden von der Sortierung der Schlüssel gestört, abhängig von Ihrer Version .

Wie funktioniert es?

  1. echo gibt Ihre Kopfzeile aus
  2. cat - nimmt die Echoausgabe von stdin (cause -) und conCAT gibt sie mit Ihrer csv-Datei
  3. aus
  4. schwamm wartet, bis das erledigt ist und schreibt das Ergebnis in dieselbe Datei und überschreibt es.

Aber du könntest es mit tee machen, ohne irgendwelche Pakete installieren zu müssen!

Nein, das konnte man nicht, wie Kos hier hervorragend demonstriert. Nicht, es sei denn, du kannst deinen csv irgendwann verlieren.

    
quelle

Tags und Links