Diff est un excellent outil pour afficher les changements entre deux files. Mais comment afficher les similitudes de deux files text (tout en ignorant les différences)?
C'est-à-dire input d'échantillon:
a: Foo Bar X Hello World 42 b: Foo Baz Hello World 23
Pseudo sortie (quelque chose comme ça):
@@ 2,3 =Hello World
Il suffit de sortinger les deux files et d'utiliser comm, car dans ce cas, les informations de ligne sont perdues.
Que diriez-vous d'utiliser diff, même si vous ne voulez pas un diff? Essaye ça:
diff --unchanged-group-format='@@ %dn,%df %<' --old-group-format='' --new-group-format='' \ --changed-group-format='' a.txt b.txt
Voici ce que je reçois avec vos données d'échantillon:
$ cat a.txt Foo Bar X Hello World 42 $ cat b.txt Foo Baz Hello World 23 $ diff --unchanged-group-format='@@ %dn,%df %<' --old-group-format='' --new-group-format='' \ --changed-group-format='' a.txt b.txt @@ 2,3 Hello World
Je ne pense pas qu'il y ait une seule command qui fasse ce que vous voulez faire. Vous pouvez essayer de combiner la sortie de diff
avec grep
, cependant. Si vos files text ne contiennent aucun des caractères |
, <
, >
, ce qui suit vous donne un résultat assez utile:
$ diff --side-by-side ab | grep -n -v "[|<>]" 3:Hello Hello 4:World World
grep -Fxf file1 file2
-F
signifie faire correspondre des strings simples (pas de regexps), -x
signifie seulement des correspondances entières, -f
signifie prendre des "patterns" (c'est-à-dire des lignes) à partir du file nommé comme argument
comm
peut être utilisé. man comm
pour toutes les options, mais vous voudrez utiliser comm -12 ...
pour afficher uniquement les lignes qui existent dans les deux inputs.
Comme les gens l'ont souligné, vous devez passer votre consortingbution par le biais d'abord.
Dick Grune a écrit une famille d'outils pour ce genre de chose:
http://dickgrune.com/Programs/similarity_tester/
Il existe des versions qui parsingnt la syntaxe de plusieurs langues, de sorte que des choses comme les variables renommées peuvent être considérées comme inchangées.
Il est empackageé en tant que similarity-tester
de similarity-tester
dans Debian et Ubuntu.