Diff ist ein großartiges Tool, um die Änderungen zwischen zwei Dateien anzuzeigen. Aber wie lassen sich die Ähnlichkeiten zweier Textdateien anzeigen (ohne Berücksichtigung der Unterschiede)?
Dh Beispiel Input:
a:
Foo Bar
X
Hello
World
42
b:
Foo Baz
Hello
World
23
Pseudo-Ausgabe (so ähnlich):
@@ 2,3
=Hello World
Es reicht nicht aus, beide Dateien zu sortieren und comm zu verwenden, da in diesem Fall die Zeileninformationen verloren gehen.
command-line
shell
diff
maxschlepzig
quelle
quelle
...%df'$'\n''%<'...
... --unchanged-group-format="@@ %dn,%df%c'\012'%<" ...
(Beachten Sie die doppelten Anführungszeichen.)which diff
, um festzustellen , ob dies Ihr Problem ist.-F
Bedeutet,-x
dass einfache Zeichenfolgen abgeglichen werden (nicht reguläre Ausdrücke). Bedeutet, dass nur ganze Zeilen abgeglichen werden. Bedeutet, dass-f
Muster (dh Linien) aus der als Argument angegebenen Datei entnommen werdenquelle
-f
und-F
ausgetauscht? Zumindest in meinergrep
Version ist das so. Ich mussfile2
Input für-f
Argumente liefern , wiecat file1 | grep -Fxf file2
und dann funktioniert.Ich glaube nicht, dass es einen einzigen Befehl gibt, der das tut, was Sie wollen. Sie können jedoch versuchen, die Ausgabe von
diff
mit zu kombinierengrep
. Wenn Ihre Textdateien keine der Zeichen|
,<
,>
, folgendes Sie etwas Nutzleistung:quelle
diff --width=155 --left-column --side-by-side a b | grep -n -v '|' | sed 's/ *($//'
comm
kann verwendet werden.man comm
für alle Optionen, aber Sie möchten verwendencomm -12 ...
, um nur Zeilen anzuzeigen, die in beiden Eingängen vorhanden sind.Wie bereits erwähnt, müssen Sie Ihre Eingaben
sort
zuerst weiterleiten .quelle
Dick Grune hat eine Reihe von Tools für diese Art von Dingen geschrieben:
http://dickgrune.com/Programs/similarity_tester/
Es gibt Versionen, die die Syntax verschiedener Sprachen analysieren, sodass Dinge wie umbenannte Variablen als unverändert angesehen werden können.
Es ist wie
similarity-tester
in Debian und Ubuntu gepackt.quelle