sid.pdm
Goto Top

2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben

Hallo Zusammen,

ich habe in einem älteren Eintrag schon einen guten Ansatz zur Lösung meines Problems gefunden, allerdings funktioniert das nur mit relativ wenigen Daten.

Folgendes ist die Herausforderung:

Ich habe zwei Textdateien alt.txt und neu.txt

Inhalt von alt.txt:
LO3
LO2
LO4
LO1
LO5

Inhalt von neu.txt:
LO2
LO1
LO4
LO3
LO7
LO12

Beide Dateien sollen nun miteinander verglichen werden.
Als Ergebnis benötige ich dann zwei Dateien. In einer sollen nur die Zeilen stehen, die nur in "neu.txt" vorhanden sind, aber nicht in "alt.txt" und in der anderen sollen nur die Zeilen stehen, die nur in "alt.txt" vorhanden sind, aber nicht in "neu.txt".
Beispiel:
Inhalt von "nur_in_neu.txt":

LO7
LO12

Inhalt von "nur_in_alt.txt":
LO5

Genau das erreiche ich mit einer Batch-Datei die ich mir gebastelt habe:

(for /f "delims=" %%i in (alt.txt) do @findstr  /i /C:"%%i" neu.txt>nul || @echo %%i)>nur_in_alt.txt  
(for /f "delims=" %%i in (neu.txt) do @findstr  /i /C:"%%i" alt.txt>nul || @echo %%i) >nur_in_neu.txt   
pause

Funktioniert hervorragend und ist genau das was ich brauche.

Jetzt kommt aber der haken an der Geschichte:
Jede der beiden Text-Dateien beinhaltet rund 235.000 Zeilen, wobei jede Zeile zwischen und 8 und 11 Zeichen hat.

Das ganze läuft dann natürlich ganz schön lange, und ich hoffe mal, dass jemand hier vielleicht eine etwas elegantere Lösung parat hat.
Ich habe das schon mit rund 62.000 Zeilen pro Datei getestet. Da lief das Batch-File 36 Minuten!

Es würde mir theoretisch auch ausreichen, nur eine Datei als Ergebnis zu bekommen. Wichtig ist aber, dass ich genau sehen können muss, welche Zeile NUR in "neu.txt" vorhanden ist und welche Zeile nur in "alt.txt" vorhanden ist.

Vielen Dank schon mal für eure Anregungen =)

Content-ID: 306674

Url: https://administrator.de/forum/2-grosse-txt-dateien-vergleichen-und-unterschiede-in-andere-datei-schreiben-306674.html

Ausgedruckt am: 02.02.2025 um 15:02 Uhr

Cthluhu
Cthluhu 09.06.2016 um 16:39:58 Uhr
Goto Top
Hi,

Die Linux-tools "diff" oder "comm" (wenn die Reihenfolge der Zeilen unwichtig ist) sollten da passen. Die gibts auch für windows als binary oder über cygwin..

mfg

Cthluhu
129413
Lösung 129413 09.06.2016 aktualisiert um 19:51:30 Uhr
Goto Top
powershell -Executionpolicy Bypass -command "compare (gc 'c:\datei1.txt') (gc 'c:\datei2.txt') | out-file 'c:\ergebnis.txt'"  
Die Pfeile zeigen in welcher Datei der Wert jeweils nur vorhanden ist (=> Rechte datei) (<= Linke Datei)

Gruß Skybird
Tsunami87
Tsunami87 09.06.2016 um 19:42:07 Uhr
Goto Top
Hallo,

Normalerweise reicht hier doch der Befehl in der cmd "fc Datei1 Datei2"

Grüße
Tsunami
129413
129413 09.06.2016 aktualisiert um 19:49:16 Uhr
Goto Top
Zitat von @Tsunami87:
Normalerweise reicht hier doch der Befehl in der cmd "fc Datei1 Datei2"
Nö nicht in dem Fall, probiers mal aus ...face-wink
sid.pdm
sid.pdm 10.06.2016 um 09:59:00 Uhr
Goto Top
Hi Skybird,
Besten Dank für den Input!!!

die Lösung ist optimal und liefert genau das was wir hier brauchen.

Damit hat sich unser regelmäßiger Arbeitsaufwand mal eben mehr als halbiert!

Grüße
sid.pdm
129413
129413 12.06.2016 um 10:33:05 Uhr
Goto Top
Schön, dann fehl ja nur noch das gelöst hinten dran.