Ich nehme einen modifizierten Befehl aus dem jq
Tutorial :
Was macht csv
gut, aber die Kopfzeilen fehlen:
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
?)
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
Fügen Sie einfach den Header-Text in einem Array vor den Werten hinzu.
%Vor%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).
sudo apt install moreutils
- wenn Sie sie noch nicht haben. Moreutils Website . 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 .
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.