Abgleich großer csv Dateien mit Powershell funktioniert nicht
Hallo,
ich möchte 2 csv Dateien abgleichen und die Unterschiede in einer dritten Datei ausgeben lassen.
Dies funktioniert auch mit einer Testdatei die 10.000 Zeilen hat in wenigen Sekunden.
Wenn ich das selbe aber mit der echten Datei mache, die ca. 600.000 Zeilen hat passiert nichts.
Schaue ich im TaskManager dann finde ich den Prozess mit ca.
20% Prozessor- und 2GB Arbeitsspeicherauslastung (egal ob ich nach 1 min. oder nach 30 min. schaue)
Ist das für Powershell zu groß oder gibt es hier einen Trick dass man den Vergleich z.B. in mehreren steps durchführt?
Für Hilfe wäre ich sehr dankbar.
Viele Grüße Carsten
So sieht der Befehl aktuell aus:
@echo off
set "file1=C:\2018\vp\c2\roh\C2_Update_alt.csv"
set "file2=C:\2018\vp\c2\roh\C2_Update.csv"
set "fileDiff=C:\2018\vp\c2\Update.csv"
Powershell -ExecutionPolicy Bypass -NoP -C "compare (gc '%file1%') (gc '%file2%') -Passthru | ?{$_.SideIndicator -eq '=>'} | sc '%fileDiff%'"
ich möchte 2 csv Dateien abgleichen und die Unterschiede in einer dritten Datei ausgeben lassen.
Dies funktioniert auch mit einer Testdatei die 10.000 Zeilen hat in wenigen Sekunden.
Wenn ich das selbe aber mit der echten Datei mache, die ca. 600.000 Zeilen hat passiert nichts.
Schaue ich im TaskManager dann finde ich den Prozess mit ca.
20% Prozessor- und 2GB Arbeitsspeicherauslastung (egal ob ich nach 1 min. oder nach 30 min. schaue)
Ist das für Powershell zu groß oder gibt es hier einen Trick dass man den Vergleich z.B. in mehreren steps durchführt?
Für Hilfe wäre ich sehr dankbar.
Viele Grüße Carsten
So sieht der Befehl aktuell aus:
@echo off
set "file1=C:\2018\vp\c2\roh\C2_Update_alt.csv"
set "file2=C:\2018\vp\c2\roh\C2_Update.csv"
set "fileDiff=C:\2018\vp\c2\Update.csv"
Powershell -ExecutionPolicy Bypass -NoP -C "compare (gc '%file1%') (gc '%file2%') -Passthru | ?{$_.SideIndicator -eq '=>'} | sc '%fileDiff%'"
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 610279
Url: https://administrator.de/forum/abgleich-grosser-csv-dateien-mit-powershell-funktioniert-nicht-610279.html
Ausgedruckt am: 05.05.2025 um 05:05 Uhr
6 Kommentare
Neuester Kommentar
Zitat von @CaErWi:
Hallo,
ich möchte 2 csv Dateien abgleichen und die Unterschiede in einer dritten Datei ausgeben lassen.
Dies funktioniert auch mit einer Testdatei die 10.000 Zeilen hat in wenigen Sekunden.
Wenn ich das selbe aber mit der echten Datei mache, die ca. 600.000 Zeilen hat passiert nichts.
Schaue ich im TaskManager dann finde ich den Prozess mit ca.
20% Prozessor- und 2GB Arbeitsspeicherauslastung (egal ob ich nach 1 min. oder nach 30 min. schaue)
Ist das für Powershell zu groß oder gibt es hier einen Trick dass man den Vergleich z.B. in mehreren steps durchführt?
Hallo,
ich möchte 2 csv Dateien abgleichen und die Unterschiede in einer dritten Datei ausgeben lassen.
Dies funktioniert auch mit einer Testdatei die 10.000 Zeilen hat in wenigen Sekunden.
Wenn ich das selbe aber mit der echten Datei mache, die ca. 600.000 Zeilen hat passiert nichts.
Schaue ich im TaskManager dann finde ich den Prozess mit ca.
20% Prozessor- und 2GB Arbeitsspeicherauslastung (egal ob ich nach 1 min. oder nach 30 min. schaue)
Ist das für Powershell zu groß oder gibt es hier einen Trick dass man den Vergleich z.B. in mehreren steps durchführt?
Moin,
Wie stark unterscheiden sich denn die beiden Dateien? je nach Alghoritmus kann das durchaus zu exponentiellem Wachstum in CPU und im Speicherverbrauch führen, wenn die sehr viele Unterschiede da sind und die Dateien sehr groß werden.
Eventuell solltest Du ins Auge fassen, da spezielle diff-programme zu nutzen.
lks
Zitat von @CaErWi:
Hi Iks,
die Spalte 1 ist bei beiden Tabellen gleich und es sind in beiden Tabellen gleich viele Zeilen.
in Spalte 2, 3 und 4 kann es bei ca. 50.000 - 100.000 Zeile Änderungen geben.
Hi Iks,
die Spalte 1 ist bei beiden Tabellen gleich und es sind in beiden Tabellen gleich viele Zeilen.
in Spalte 2, 3 und 4 kann es bei ca. 50.000 - 100.000 Zeile Änderungen geben.
D.h. Du hast gleich viele Zeilen und Differenzen sind in beiden Dateien jeweils in der gleichen Zeilennummer?
Dann muß ich wohl man nach diff Programmen suchen, die über die Kommandozeile ausgeführt werden können?
Wenn das wie oben vermutet wirklich gleich viele Zeilen sind und keine eingefügten oder weggelassenen Zeilen gibt, so könntest Du einfach die großen Dateien in kleinere Splitten vergleichen und die Ergebnisse hinterher wieder zusammenzuführen. Oder Du vergleichst einfach zeilenweise per Skript.
lks

Gerade mal mit zwei Test-Files à 600000 Zeilen getestet (jedes File ist 20MB groß), dauer ca. 10 Sekunden mit der Powershell, die Hauptzeit geht hauptsächlich beim Einlesen der Dateien in ein Array flöten (gc), mit Import-CSV und Angabe der zu vergleichenden Spalten kannst du das noch optimieren. Oder -ReadCount Parameter bei gc.
Mit der Bash und "diff" ist das übrigens in einem Bruchteil einer Sekunden erledigt
.
Mit der Bash und "diff" ist das übrigens in einem Bruchteil einer Sekunden erledigt