Script für Zusammenführung einer CSV Datei
Script für Zusammenführung einer CSV Datei
Hallo,
ich habe folgendes Problem:
Ich habe eine CSV Datei, die aus xt-commerce Exportiert wurde.
In dieser sind Artikelnummern, Bezeichnungen , Bilder und Preise.
Die Datei ist relativ gross (passt nicht mehr in Calc).
Nun möchte ich diese Datei Zeilenweise durchsuchen und Werte aus einer zweiten Datei
austauschen lassen. In dieser Datei sind die Werte Artikelnummer und Artikelname.
Diese beiden Werte sollen nun in die erste Datei übernommen werden, alle anderen Felder aber
unangetastet bleiben.
Als Feldtrenner ist ; hinterlegt, als Textfeld ""
Wer kann mir helfen???
ich habe folgendes Problem:
Ich habe eine CSV Datei, die aus xt-commerce Exportiert wurde.
In dieser sind Artikelnummern, Bezeichnungen , Bilder und Preise.
Die Datei ist relativ gross (passt nicht mehr in Calc).
Nun möchte ich diese Datei Zeilenweise durchsuchen und Werte aus einer zweiten Datei
austauschen lassen. In dieser Datei sind die Werte Artikelnummer und Artikelname.
Diese beiden Werte sollen nun in die erste Datei übernommen werden, alle anderen Felder aber
unangetastet bleiben.
Als Feldtrenner ist ; hinterlegt, als Textfeld ""
Wer kann mir helfen???
Re: Script für Zusammenführung einer CSV Datei
Das lässt sich sehr leicht mit Perl-Hashes programmieren. Leider ist aus deiner Beschreibung weder erkennbar wie die Dateien genau aussehen noch welche Daten wo ausgetauscht werden sollen.
Bitte poste für jede der beiden Anfangsdateien ein kurzes Beispiel aus jeweils zwei bis drei Zeilen, damit man sich das genauer vorstellen kann. Und poste auch kurz wie das Ziel aussehen soll. Verfremde ruhig die Daten.
Bitte poste für jede der beiden Anfangsdateien ein kurzes Beispiel aus jeweils zwei bis drei Zeilen, damit man sich das genauer vorstellen kann. Und poste auch kurz wie das Ziel aussehen soll. Verfremde ruhig die Daten.
- The Hit-Man
- Beiträge: 2248
- Registriert: 21.11.2004 17:01:56
- Wohnort: Menden ( Sauerland )
-
Kontaktdaten:
Re: Script für Zusammenführung einer CSV Datei
kenne mich nicht mit perl aus, aber unter python kann man strings super gut verarbeiten ( ist nur meine meinung ).
Code: Alles auswählen
splitline.split ()
Wer HTML postet oder gepostetes HTML quotet oder sich gepostetes oder
gequotetes HTML beschafft, um es in Verkehr zu bringen, wird geplonkt.
damals windows, früher ubuntu, danach debian, heute arch-linux
gequotetes HTML beschafft, um es in Verkehr zu bringen, wird geplonkt.
damals windows, früher ubuntu, danach debian, heute arch-linux
Re: Script für Zusammenführung einer CSV Datei
Hallo
so hier sind die Daten,
verfremden macht ja wenig Sinn, weil die ja auch so im Shop stehen.
Die oberste Zeile benennt die Namen der Spalten.
Ich möchte aus einer zweiten Datei in der nur Artikelnummer und Artikelname stehen einen Abglich durchführen.
Kommt Artikelnummer von Datei2 in Datei1 vor, dann übernehme den Artikelname aus Datei2, behalte aber alle anderen Werte aus Datei eins.
Am besten, wenn das Ergebnis dann in eine neue Datei geschrieben wird.
Dann kann ich diese neue Datei einfach wieder importieren.
Konnte ich mich verständlich ausdrücken?
so hier sind die Daten,
verfremden macht ja wenig Sinn, weil die ja auch so im Shop stehen.
Die oberste Zeile benennt die Namen der Spalten.
Ich möchte aus einer zweiten Datei in der nur Artikelnummer und Artikelname stehen einen Abglich durchführen.
Kommt Artikelnummer von Datei2 in Datei1 vor, dann übernehme den Artikelname aus Datei2, behalte aber alle anderen Werte aus Datei eins.
Am besten, wenn das Ergebnis dann in eine neue Datei geschrieben wird.
Dann kann ich diese neue Datei einfach wieder importieren.
Konnte ich mich verständlich ausdrücken?
Code: Alles auswählen
"XTSOL";"action";"p_model";"p_stock";"p_sorting";"p_shipping";"p_tpl";"p_manufacturer";"p_fsk18";"p_priceNoTax";"p_priceNoTax.1";"p_priceNoTax.2";"p_priceNoTax.3";"p_tax";"p_status";"p_weight";"p_ean";"p_disc";"p_opttpl";"p_vpe";"p_vpe_status";"p_vpe_value";"p_image";"p_name.de";"p_desc.de";"p_shortdesc.de";"p_keywords.de";"p_meta_title.de";"p_meta_desc.de";"p_meta_key.de";"p_url.de";"p_cat.0";"p_cat.1";"p_cat.2";"p_cat.3";"p_cat.4";"p_cat.5"
"XTSOL";"insert";"WHE 0710";"0";"0";"0";;;"0";"505.0000";"1:505.0000::1:505.0000::1:505.0000";"1:505.0000::1:505.0000::1:505.0000";"1:505.0000::1:505.0000::1:505.0000";"1019";"1";"26.00";;"0.00";;"0";"0";"0.0000";"WHE 0710.jpg";"Wandhaube, Schr�gform, 1000x700x450mm";"die Fettauffanghauben sind komplett aus Edelstahl und punktgeschweisst, aufgeteilt in einen Auffang- und Absaugraum mit einerReihe herausnehmbarer Fettauffangfilter Typ B, Flammschutzfilter Typ B bei Luftgeschwindigkeit 1,2 m/s, Druckverlust aller Filter (114 Pa), Luftmenge je Filter 500x400x20 mm 720 m3/h, 400x400x20 mm 560 m3/h, rundumlaufende Fettauffangrinne inkl. mit eingelassenem Fettablassventil, inkl. Aufbaubeleuchtung, spritzwassergesch�tzt IP.54 (ohne Verdrahtung), Wandbefestigung, Pflege- und Reinigungshinweise beachten";;;;;;;"L�FTUNG";"HAUBEN";"Wandhauben";"WANDHAUBEN ECO-LINE";"schr�gform (Basic)";
"XTSOL";"insert";"WHE 0712";"0";"0";"0";;;"0";"559.0000";"1:559.0000::1:559.0000::1:559.0000";"1:559.0000::1:559.0000::1:559.0000";"1:559.0000::1:559.0000::1:559.0000";"1019";"1";"27.00";;"0.00";;"0";"0";"0.0000";"WHE 0712.jpg";"Wandhaube, Schr�gform, 1200x700x450mm";"die Fettauffanghauben sind komplett aus Edelstahl und punktgeschweisst, aufgeteilt in einen Auffang- und Absaugraum mit einerReihe herausnehmbarer Fettauffangfilter Typ B, Flammschutzfilter Typ B bei Luftgeschwindigkeit 1,2 m/s, Druckverlust aller Filter (114 Pa), Luftmenge je Filter 500x400x20 mm 720 m3/h, 400x400x20 mm 560 m3/h, rundumlaufende Fettauffangrinne inkl. mit eingelassenem Fettablassventil, inkl. Aufbaubeleuchtung, spritzwassergesch�tzt IP.54 (ohne Verdrahtung), Wandbefestigung, Pflege- und Reinigungshinweise beachten";;;;;;;"L�FTUNG";"HAUBEN";"Wandhauben";"WANDHAUBEN ECO-LINE";"schr�gform (Basic)";
"XTSOL";"insert";"WHE 0714";"0";"0";"0";;;"0";"619.0000";"1:619.0000::1:619.0000::1:619.0000";"1:619.0000::1:619.0000::1:619.0000";"1:619.0000::1:619.0000::1:619.0000";"1019";"1";"28.00";;"0.00";;"0";"0";"0.0000";"WHE 0714.jpg";"Wandhaube, Schr�gform, 1400x700x450mm";"die Fettauffanghauben sind komplett aus Edelstahl und punktgeschweisst, aufgeteilt in einen Auffang- und Absaugraum mit einerReihe herausnehmbarer Fettauffangfilter Typ B, Flammschutzfilter Typ B bei Luftgeschwindigkeit 1,2 m/s, Druckverlust aller Filter (114 Pa), Luftmenge je Filter 500x400x20 mm 720 m3/h, 400x400x20 mm 560 m3/h, rundumlaufende Fettauffangrinne inkl. mit eingelassenem Fettablassventil, inkl. Aufbaubeleuchtung, spritzwassergesch�tzt IP.54 (ohne Verdrahtung), Wandbefestigung, Pflege- und Reinigungshinweise beachten";;;;;;;"L�FTUNG";"HAUBEN";"Wandhauben";"WANDHAUBEN ECO-LINE";"schr�gform (Basic)";
Re: Script für Zusammenführung einer CSV Datei
Dem kann ich nur zustimmen. Leider fehlt eben das viel zu oft bei Fragestellungen.uname hat geschrieben:Leider ist aus deiner Beschreibung weder erkennbar wie die Dateien genau aussehen noch welche Daten wo ausgetauscht werden sollen.
Bitte poste für jede der beiden Anfangsdateien ein kurzes Beispiel aus jeweils zwei bis drei Zeilen, damit man sich das genauer vorstellen kann. Und poste auch kurz wie das Ziel aussehen soll. Verfremde ruhig die Daten.
Zur Problemloesung:
Wenn du es in der Shell machen willst, also ohne Perl oder Python, dann koennte das so ablaufen:
1) Die Daten z.B. mit sed(1) umkonvertieren damit die Felder z.B. Tab-getrennt sind und nicht mehr durch Anfuehrungszeichen eingeschlossen. Etwa auf diese Art:
Code: Alles auswählen
sed 's,^",,;s,"$,,;s,";",\t,g'
Code: Alles auswählen
join -t '\t' file1 file2
EDIT: Nun da Beispieldaten vorliegen ist klar, dass das Format der CSV-Daten flexibler ist (leere Felder; Zeilenumbrueche), somit ist dieser Ansatz zu einfach dafuer. Fertige CSV-Module fuer Perl und Co. decken diese Faelle ab und sind deshalb die Mittel der Wahl.
Use ed once in a while!
-
- Beiträge: 134
- Registriert: 03.02.2011 11:11:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Frankfurt
Re: Script für Zusammenführung einer CSV Datei
CSV-Dateien sind ideales Futter für awk
Das folgende Skript verwendet zwei Eingabedateien:
daten1.csv: die vom TE bereitgestellten Testdaten
daten2.csv: die zweite Datei, die nur Artikelnummer und Namen enthält,
da keine Beispieldatei vorliegt, habe ich etwas zusammengebastelt:
Das Skript:
Das Skript tauscht die Namen aus daten1.csv mit denen aus daten2.csv aus, die übrigen Spalten bleiben unverändert.
Ich weiß nicht, ob die Spaltenummern so stimmen, (Artikelnummer in Spalte 3, Name in Spalte 24 bzw. 4),
ggf. sind die Feldnummern bzw. Array-Indices anzupassen.
Das folgende Skript verwendet zwei Eingabedateien:
daten1.csv: die vom TE bereitgestellten Testdaten
daten2.csv: die zweite Datei, die nur Artikelnummer und Namen enthält,
da keine Beispieldatei vorliegt, habe ich etwas zusammengebastelt:
Code: Alles auswählen
cat daten2.csv
XTSOL;Action;p_model;p_name
XTSOL;Insert;"WHE 0710";"neuer Name fuer WHE 0710"
XTSOL;Insert;"WHE 0712";"neuer Name fuer WHE 0712"
XTSOL;Insert;"WHE 0714";"neuer Name fuer WHE 0714"
Code: Alles auswählen
#!/bin/bash
#
awk -F\; 'BEGIN { OFS=";" }
{
while ((getline zeile < "daten2.csv") > 0) {
split(zeile,artikel,";")
if ($3==artikel[3]) $24=artikel[4]
break
}
print $0
}' daten1.csv
Ich weiß nicht, ob die Spaltenummern so stimmen, (Artikelnummer in Spalte 3, Name in Spalte 24 bzw. 4),
ggf. sind die Feldnummern bzw. Array-Indices anzupassen.
Re: Script für Zusammenführung einer CSV Datei
Eben nicht denn CSV-Dateien haben keine klar definierbaren Recordtrenner, noch eindeutige Feldtrenner. Man muss sie parsen.newdeb hat geschrieben:CSV-Dateien sind ideales Futter für awk
Fuer einfache CSV-Dateien sind die klassischen Unix-Tools geeignet aber nicht fuer die volle Flexibilitaet des CSV-Formats.
Use ed once in a while!