2016-06-29 7 views
0

Ich versuche, zwei Textdateien zu vergleichen und die Ergebnisse in einer neuen Datei zu speichern. Es sollte nur Zeilen anzeigen, die neu sind und Sortierreihenfolgen ignorieren. Ich möchte nur sehen, was neu ist und keine Zeilenänderungen. Um dies zu erreichen, habe ich mehrere Möglichkeiten in einer Batchdatei ausprobiert, die Sie unten sehen können. Zuerst verwende ich uniq und Art wie die Reihenfolge der beiden Dateien zu ändern:Neue Zeilen zwischen zwei Dateien auf neue Datei filtern

D:/filetype/sort.exe -b D:\filetype\listfile\listfile_clean_tmp3_1.txt -oD:\filetype\listfile\listfile_clean_tmp4.txt 

Danach habe ich beiden Dateien in einen neuen zu vergleichen versucht.

1) über comm

D:/filetype/comm.exe --nocheck-order -2 -3 d:/filetype/listfile/listfile_clean_tmp4.txt d:/filetype/listfile/archive/tmp/all.txt > D:\filetype\listfile\listfile_clean_tmp5.txt 

eine schreckliche Lösung, funktioniert nicht richtig. Wenn es etwas anderes in der Reihenfolge gibt, gibt es viele falsche Ergebnisse aus. Wenn ich zum Beispiel das Ergebnis im Archiv ablege und es erneut mit ihm selbst vergleiche, werden neue Zeilen angezeigt. Via

2) diff

D:/filetype/diff.exe --new-line-format="" --unchanged-line-format="" d:/filetype/listfile/listfile_clean_tmp4.txt d:/filetype/listfile/archive/tmp/all.txt > D:\filetype\listfile\listfile_clean_tmp5.txt 

Gleiche wie .comm, wenn ich die archivierten Datei mit sich selbst vergleichen werden neue Linien angezeigt werden soll.

3) Grep, SED und Diff

D:/filetype/diff.exe -U $(wc -l < (D:/filetype/listfile/listfile_clean_tmp4.txt) (D:/filetype/listfile/listfile_clean_tmp4.txt D:/filetype/listfile/archive/tmp/all.txt | D:/filetype/grep.exe '^-' | D:/filetype/sed.exe 's/^-//g' > D:\filetype\listfile\listfile_clean_tmp5.txt 

nicht in der Lage waren diese auf einem Windows Batch zu bekommen, und können nicht herausfinden, warum die Fehlermeldung „Falsche Syntax für Namen Datei oder einen Ordner“ erscheint. Irgendwelche Ideen wären großartig.

Einige weitere Informationen - ich coreutils in Windows bin mit - ein Py Skript, batch verwenden könnte, php und corutils - ich addiere das Ergebnis zum Archiv

Hier ist ein Beispiel-Datei: http://pastebin.com/raw/tNGSu2W6

Zuerst: Ich vergleiche es mit einer leeren txt-Datei (all.txt), im letzten Schritt füge ich es in all.txt (als Archiv) zusammen und normalerweise sollte er beim nächsten Lauf keinen Unterschied finden.

Um niemanden zu verwirren ist dies das Ganze (es ist ein bisschen spartanisch). trow Fehlermeldungen an Fenstern http://pastebin.com/T68sqpET

Update 1 den pastbin Code geändert, da ein Tippfehler auf Seiten mit diff.exe "< filename <filename> output" wird war. Auch die Zahlen waren nicht die Schuld von diff. Ich habe "uniq.exe -c" verwendet und musste -c entfernen.

+0

Können Sie [bearbeiten] und fügen Sie Ihre zwei Testdateien hinzu? – DavidPostill

+0

Fertig :) Ich hoffe Pastebin ist in Ordnung. – Deex

+0

Ich sehe in der letzten Befehlszeile einige unsymmetrische Klammern(). Außerdem müssen Sie [Escape] (http://ss64.com/nt/syntax-esc.html) alle 'cmd' giftigen Zeichen, um sie richtig zu' diff.exe' zu ​​liefern: escape '<' as '^ < 'und zu' grep.exe': escape ˙^˙ als '^^'. – JosefZ

Antwort

0

Okay, ich habe herausgefunden, warum Comm nicht richtig funktioniert. Der Befehl

D:/filetype/comm.exe --nocheck-order -2 -3 d:/filetype/listfile/listfile_clean_tmp4.txt d:/filetype/listfile/archive/tmp/all.txt > D:\filetype\listfile\listfile_clean_tmp5.txt 

Braucht nicht --no-check-order, aber das ist nicht alles. Der Hauptgrund, warum es beim Vergleichen versagte, war, dass ich uniq oder Merger in meiner Tool Chain verwendet habe und es nicht immer wieder streng nach Teilen der Textdatei sortiert habe. Es ist sehr wichtig, dass Dateien, die mit comm verglichen werden, immer in der richtigen Reihenfolge sortiert werden.Hier ist ein Beispiel mit Linux-Art, die aus coreutils

D:/filetype/core/sort.exe -b D:\filetype\listfile\archive\tmp\bruteforce.txt -o D:\filetype\listfile\archive\tmp\bruteforce2.txt 
D:/filetype/core/uniq.exe D:\filetype\listfile\archive\tmp\bruteforce2.txt > D:\filetype\listfile\archive\tmp\bruteforce3.txt 
D:/filetype/core/sort.exe -b D:\filetype\listfile\archive\tmp\bruteforce3.txt -o D:\filetype\listfile\archive\tmp\bruteforce4.txt 

Hinweis: Art wird keine Schwierigkeiten machen, wenn Sie die gleiche Datei sortieren, ohne es an einen anderen Ort zu kopieren (außer uniq die schlecht reagieren zu tun so) . Ich persönlich bevorzuge temporäre Dateien, aber sie sind nicht notwendig für die Sortierung.

D:/filetype/core/sort.exe -b D:/filetype/listfile/listfile.txt -o D:/filetype/listfile/listfile.txt 

Oder mit einfachen Worten .. „es ändern> sortieren es“, wenn Sie es vergleichen möchten.