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-Key: 91234305737

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

Printed on: April 28, 2024 at 03:04 o'clock

Member: colinardo
Solution colinardo Jan 25, 2024 updated at 11:02:08 (UTC)
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
Member: Crusher79
Crusher79 Jan 25, 2024 at 10:00:54 (UTC)
Goto Top
copy *.csv newfile.csv

Sollte auch gehen.
Member: erikro
erikro Jan 25, 2024 at 10:06:13 (UTC)
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
Member: niraxx
niraxx Jan 25, 2024 at 10:14:21 (UTC)
Goto Top
Geht nicht auch sowas:

copy quelle1.csv + quelle2.csv ziel.csv
Member: Crusher79
Crusher79 Jan 25, 2024 at 10:20:25 (UTC)
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.
Member: erikro
erikro Jan 25, 2024 at 10:21:51 (UTC)
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?
Member: colinardo
colinardo Jan 25, 2024 updated at 10:57:10 (UTC)
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.
Member: erikro
erikro Jan 25, 2024 at 10:40:57 (UTC)
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
Member: colinardo
colinardo Jan 25, 2024 updated at 10:47:24 (UTC)
Goto Top
Zitat von @Crusher79:

copy *.csv newfile.csv

Sollte auch gehen.
Dann aber bitte mit /B wenn es keine reinen ASCII Dateien sind.
Member: colinardo
colinardo Jan 25, 2024 updated at 11:10:18 (UTC)
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.
Member: an-x-ur
an-x-ur Jan 26, 2024 at 05:58:44 (UTC)
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.