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

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

Printed on: April 25, 2024 at 04:04 o'clock

Member: Cthluhu
Cthluhu Jun 09, 2016 at 14:39:58 (UTC)
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
Mitglied: 129413
Solution 129413 Jun 09, 2016 updated at 17:51:30 (UTC)
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
Member: Tsunami87
Tsunami87 Jun 09, 2016 at 17:42:07 (UTC)
Goto Top
Hallo,

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

Grüße
Tsunami
Mitglied: 129413
129413 Jun 09, 2016 updated at 17:49:16 (UTC)
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
Member: sid.pdm
sid.pdm Jun 10, 2016 at 07:59:00 (UTC)
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
Mitglied: 129413
129413 Jun 12, 2016 at 08:33:05 (UTC)
Goto Top
Schön, dann fehl ja nur noch das gelöst hinten dran.