
Ich frage mich nur, wie ich Excel-Dateien in CSV exportieren und dabei die mehrspaltigen Überschriften beibehalten kann?
Mir ist bewusst, dass CSV dies nicht unterstützt, ich hoffe jedoch, dass ich den Kopfzeilennamen für jede Spalte, die durchlaufen wird, duplizieren kann.
Zur Veranschaulichung: Das ist, was ich derzeit bekomme
a,,,b,,,c,,
1,2,3,4,5,6,7,8,9
d1,d1,d1,d1,d1,d1,d1,d1,d1,d1 d2
,d2,d2,d2,d2,d2,d2,d2,d2,d2
Das ist, was ich möchte
a, a, a, b, 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, aber wenn ich nicht nach dem falschen Begriff suche, kann ich anscheinend nicht viel dazu finden.
Die Lösung muss nicht von Microsoft sein … kann auch eine Linux-Lösung sein.
Danke, Brian
Antwort1
Wenn Sie Ihre Tabelle file1.csv
wie gezeigt nach exportiert haben,
#!/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=,
setztawk
die Eingabe- und Ausgabedateitrennzeichen auf,
.NR==1
bedeutet „Führen Sie das Folgende nur für den ersten Datensatz (die erste Zeile) aus“.- Die
for
Schleife betrachtet jedes Feld (jede Zelle) in der ersten Zeile und setzt es, wenn es leer ist, auf den vorhergehenden Wert. { print }
druckt alle Datensätze vonfile1.csv
bisfile2.csv
, wobei der erste geändert wird (wie oben beschrieben) und alle anderen von der Eingabe zur Ausgabe durchgereicht werden (leere Zellen unterhalb der ersten Zeile werden also nicht manipuliert).