Windows 10 fc Befehl: Kommagetrennte Dateivergleich

709
MAK

Ich habe zwei Dateien mit jeweils 3 GB, um einen Vergleich durchzuführen und die Differenzdaten in eine dritte Datei zu speichern.

Nachfolgend finden Sie die Beispieldaten.

Datei 1 : June_01_2018.csv

Windows 10 fc Befehl: Kommagetrennte Dateivergleich

Datei 2 : June_02_2018.csv

Windows 10 fc Befehl: Kommagetrennte Dateivergleich

Hinweis : Ich möchte den Unterschied in der dritten Datei mit den Spaltenüberschriften speichern.

Erwartetes Ergebnis : Die dritte Datei sollte die Datensätze von ID11 bis 15 mit den Spaltenüberschriften enthalten.

Mein try : fcBefehl in der Eingabeaufforderung,

>fc June_01_2018.csv June_02_2018.csv > June_Diff.csv 

Aber unerwartetes Ergebnis bekommen:

Windows 10 fc Befehl: Kommagetrennte Dateivergleich

1
Verwandte Themen: [So vergleichen Sie zwei CSV-Dateien in Windows] (https://stackoverflow.com/q/33523362). `fc` ist ein interaktives Befehlszeilentool, dh es wird immer eine vom Menschen lesbare Ausgabe erzeugt. Außerdem werden Textdateien zeilenweise verglichen und die Bedeutung der Zeilen ist nicht bekannt. In Ihrem Fall ist die erste Zeile mit den Spaltenüberschriften in beiden Dateien identisch und wird daher nicht gedruckt. Wenn Sie die [docs] (https://docs.microsoft.com/de-de/windows-server/administration/windows-commands/fc) lesen, werden Sie feststellen, dass Ihre Ausgabe die erwartete Ausgabe ist. Ich bezweifle, dass "fc" das richtige Werkzeug für diese Aufgabe ist. danzel vor 6 Jahren 1

1 Antwort auf die Frage

1
LotPings

Hoffnungen haben nichts mit (realistischen) Erwartungen zu tun.

Der Header ist genau derselbe, könnte also niemals einen Unterschied machen.
Auch die Excel-Darstellung ist nicht die CSV-Datei. Sie sollten die Originaldateien als Text veröffentlichen.

Die folgende Batch-Datei liest den Header ein und erinnert an den Diff.
Anstelle von fc wird findstr mit Optionen verwendet

/B compare from line begin /E compare upto line end /V output lines **not** present in compared file /G: get strings from a file 

@Echo off Set "File1=June_01_2018.csv" Set "File2=June_02_2018.csv" Set "File3=June_Diff.csv"  Set /P "Header="<"%File1%" ( Echo=%Header% Findstr.exe /BEV /G:"%File2%" "%File1%" )>"%File3%" 

Variante mit fc

@Echo off Set "File1=June_01_2018.csv" Set "File2=June_02_2018.csv" Set "File3=June_Diff.csv"  Set /P "Header="<"%File1%" ( Echo=%Header% fc "%File1%" "%File2%"|more +3  )>"%File3%" 

Das hinterlässt nur die nachlaufende Linie.

Fehlermeldung "FINDSTR: Suchzeichenfolge zu lang". MAK vor 6 Jahren 0
Mit welchen Dateigrößen beschäftigen Sie sich? LotPings vor 6 Jahren 0
Die Datei ist jeweils 3 GB groß. MAK vor 6 Jahren 0
Nun, das definitiv [Findstr-Limits] überschreitet (https://stackoverflow.com/questions/8844868/what-are-the-undocumented-features-and-limitations-of-the-windows-findstr-comman). Sie können den Header verwenden Gehen Sie folgendermaßen vor, hängen Sie die fc-Variante an und optimieren Sie die Ausgabe, indem Sie die unerwünschten Zeilen entfernen, die mit "compare" und "*****" beginnen LotPings vor 6 Jahren 0
Ich habe mit fc Befehl mit Ihrem Code versucht. Aber der Fehler RESYNC ist fehlgeschlagen. Um dies zu überwinden, habe ich gerade / Lb 200000 zu fc hinzugefügt, da der Unterschied zwischen zwei Dateien etwa 1 Million Datensätze enthält. Das Skript läuft noch von den letzten 15 Minuten. MAK vor 6 Jahren 0
Es ist also nicht nur so, dass die neue Datei Einträge hinzugefügt hat, sie erscheinen auch in der Mitte der Datei. LotPings vor 6 Jahren 0
Ja! Und es hat zwei eindeutige Spalten. MAK vor 6 Jahren 0
Dann fürchte ich, dass ein auf Textdateien basierender Diff-Ansatz nicht die beste Methode ist. Möglicherweise benötigen Sie ein Dbms. LotPings vor 6 Jahren 0
Okay, werde es von dbms versuchen. MAK vor 6 Jahren 0