an-x-ur
Goto Top

Mehrere CSV-Files in eine Datei

Hallo an die Community,

ich habe eine Frage und vielleicht kennt einer von euch eine Möglichkeit dies umzusetzen.

Ich habe eine Vielzahl an einzeiligen CSV-Dateien.
Diese möchte ich gern zu einer Datei zusammenführen um eine bessere Auswertung durchführen zu können.

Wenn es eine Möglichkeit geben würde, wie ich im Notepad++ z.B. eine CSV geöffnet habe und dann "anfügen" könnte, wäre das schon mal recht hilfreich, oder es gibt eine Lösung wo ich im Bulk einfach die 80+ Dateien zusammenführen könnte. Jeder Dateiinhalt quasi eine neue Zeile.

Ich nehme auch Excel oder ein anderes Tool, solang das Ergebnis passt.

Vielleicht kann mir hier jemand helfen.

Content-ID: 91234305737

Url: https://administrator.de/contentid/91234305737

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

colinardo
Lösung colinardo 25.01.2024 aktualisiert um 12:02:08 Uhr
Goto Top
Servus.
Mit Powershell etwa ein kleiner Einzeiler wenn die Dateien keine Header haben
Get-Content "c:\myfolder\*.csv" | Set-Content "d:\merged.csv"  
Mit Headern
Get-ChildItem -LiteralPath "c:\myfolder" -File -Filter *.csv | select -Expand Fullname | Import-Csv -Delimiter ";" -Encoding UTF8 | export-csv -LiteralPath "d:\merged.csv" -delimiter ";" -NoType -Encoding UTF8 -force  
Grüße Uwe
Crusher79
Crusher79 25.01.2024 um 11:00:54 Uhr
Goto Top
copy *.csv newfile.csv

Sollte auch gehen.
erikro
erikro 25.01.2024 um 11:06:13 Uhr
Goto Top
Moin,

mit oder ohne Überschriften? Ansonsten wäre mein PS-Einzeiler auf die Schnelle für csv mit Überschriften:

get-childitem -filter *.csv | %{import-csv $_ -encoding utf8 -delimiter ";" | export-csv new.csv -encoding utf8 -delimiter ";" -notypeinformation -append -force}  

Trennzeichen und Kodierung evtl. anpassen.

hth

Erik
niraxx
niraxx 25.01.2024 um 11:14:21 Uhr
Goto Top
Geht nicht auch sowas:

copy quelle1.csv + quelle2.csv ziel.csv
Crusher79
Crusher79 25.01.2024 um 11:20:25 Uhr
Goto Top
Zitat von @niraxx:

Geht nicht auch sowas:

copy quelle1.csv + quelle2.csv ziel.csv

Schon aber bei tausenden von Dateien müßig! Außer mann schreibt es in Excel vlt. runter - Zahlen hochsetzten - kopiert alles in Notepad++ und löscht \r\n. Dann hab man eine Zeile mit zig tausend Parametern.....

Solche Sauereien hab ich mal für kurz INSERTs in SQL gemacht. War aber nur ein Bruchteil. Wenn man sehr eilig hat und nur Regex als kleinen Teil einsetzen will. Batch oder PS sind bei einzeiligen CSV kein Problem. Gibt ja keinen Header.
erikro
erikro 25.01.2024 um 11:21:51 Uhr
Goto Top
Zitat von @colinardo:
Mit Headern
Get-ChildItem -LiteralPath "c:\myfolder" -File -Filter *.csv | select -Expand Fullname | Import-Csv -Delimiter ";" -Encoding UTF8 | export-csv "d:\merged.csv" -delimiter ";" -NoType -Encoding UTF8 -force  

Geht das ohne foreach-object hinter der ersten Pipe?
colinardo
colinardo 25.01.2024 aktualisiert um 11:57:10 Uhr
Goto Top
Zitat von @erikro:

Zitat von @colinardo:
Mit Headern
Get-ChildItem -LiteralPath "c:\myfolder" -File -Filter *.csv | Import-Csv -Delimiter ";" -Encoding UTF8 | export-csv "d:\merged.csv" -delimiter ";" -NoType -Encoding UTF8 -force  

Geht das ohne foreach-object hinter der ersten Pipe?

Ja, Import-CSV akzeptiert mehrere Pfade für den Path Parameter auch als InputParameter via Pipe setzt aber eine aktuelle PS voraus.
erikro
erikro 25.01.2024 um 11:40:57 Uhr
Goto Top
Zitat von @colinardo:

Zitat von @erikro:

Zitat von @colinardo:
Mit Headern
Get-ChildItem -LiteralPath "c:\myfolder" -File -Filter *.csv | select -Expand Fullname | Import-Csv -Delimiter ";" -Encoding UTF8 | export-csv "d:\merged.csv" -delimiter ";" -NoType -Encoding UTF8 -force  

Geht das ohne foreach-object hinter der ersten Pipe?

Ja, Import-CSV akzeptiert mehrere Pfade für den Path Parameter auch als InputParameter via Pipe, setzt aber eine aktuelle PS voraus.

Wieder was gelernt. face-smile
colinardo
colinardo 25.01.2024 aktualisiert um 11:47:24 Uhr
Goto Top
Zitat von @Crusher79:

copy *.csv newfile.csv

Sollte auch gehen.
Dann aber bitte mit /B wenn es keine reinen ASCII Dateien sind.
colinardo
colinardo 25.01.2024 aktualisiert um 12:10:18 Uhr
Goto Top
Zitat von @erikro:
Wieder was gelernt. face-smile
👍, man muss aber beachten das wenn man Powershell Versionen < 6 einsetzt Import-CSV noch einen Bug hat bzw. den Pfad nicht aus den Properties des Pipeine-Objects entnehmen kann, hier muss man den Pfad expandieren bevor man ihn an Import-CSV übergibt (Habe das oben aus Kompatibilitätsgründen noch ergänzt).
Get-ChildItem -LiteralPath "c:\myfolder" -File -Filter *.csv | select -ExpandProperty Fullname | Import-Csv ............  
PS 6 und 7 akzeptieren inzwischen das ganze File-Object als Input.
an-x-ur
an-x-ur 26.01.2024 um 06:58:44 Uhr
Goto Top
Zitat von @colinardo:

Servus.
Mit Powershell etwa ein kleiner Einzeiler wenn die Dateien keine Header haben
Get-Content "c:\myfolder\*.csv" | Set-Content "d:\merged.csv"  
Mit Headern
Get-ChildItem -LiteralPath "c:\myfolder" -File -Filter *.csv | select -Expand Fullname | Import-Csv -Delimiter ";" -Encoding UTF8 | export-csv -LiteralPath "d:\merged.csv" -delimiter ";" -NoType -Encoding UTF8 -force  
Grüße Uwe

Es macht exakt das, was es soll.
Vielen Dank.

Da die Dateien eh ohne header kommen sondern einfach nur plain die Infos haben, ist dieser Schritt exakt das, wonach ich gesucht habe.

Dies erleichtert mir jetzt immens das weitere Vorgehen.