Excel-Spaltenüberschriften werden in CSV-Dateien exportiert

842
user1641165

Sie müssen einfach nur umherwandern, wie ich Excel-Dateien in csv exportieren kann, während Sie die mehrspaltigen Header beibehalten.

Ich stelle fest, dass csv dies nicht unterstützt. Ich hoffe jedoch, dass ich den Namen der Überschrift für jede Spalte duplizieren kann, die er überschreitet.

Zur Veranschaulichung bekomme ich dies gerade

a ,,, b ,,, c ,,
1,2,3,4,5,6,7,8,9d1,
d1, d1, d1, d1, d1, d1, d1, d1, d1,
d2, d2, d2 d2, d2, d2, d2, d2, d2

Das möchte ich gerne

a, a, a, b, b, c, c, c
1,2,3,4,5,6,7,8,9
d1, d1, d1, d1, d1, d1, d1, d1, d1
d2, d2, d2, d2, d2, d2, d2, d2, d2

Ich habe nach einer Antwort gesucht, es sei denn, ich suche nach dem falschen Begriff ... Ich kann anscheinend nicht viel dazu finden.

Die Lösung muss nicht Microsoft sein ... kann auch eine Linux-Lösung sein.

Danke, Brian

1

1 Antwort auf die Frage

0
Scott

Wenn Sie Ihre Tabelle file1.csvwie gezeigt exportiert haben, tun Sie dies

#!/bin/sh awk -F, -v OFS=, ' NR==1 { for (i = 1; i <= NF; i++) { if ($i == "") $i = prev prev=$i } } { print }' < file1.csv > file2.csv 
  • -F, -v OFS=,Setzt awkdie Eingabe- und Ausgabedatei-Trennzeichen auf ,.
  • NR==1 bedeutet "nur beim ersten Datensatz (Zeile / Zeile) Folgendes tun".
  • Die forSchleife betrachtet jedes Feld (Zelle) in der ersten Zeile und setzt es, falls es leer ist, auf den vorhergehenden Wert.
  • { print }druckt alle Datensätze von file1.csvbis file2.csv, wobei der erste geändert wird (wie oben beschrieben) und alle anderen von der Eingabe zur Ausgabe weitergeleitet werden (leere Zellen unterhalb der ersten Zeile werden also nicht manipuliert).