DIFF est un excellent outil pour afficher les modifications entre deux fichiers. Mais comment afficher les similitudes de deux fichiers texte (tout en ignorant les différences)?
C'est à dire. Entrée 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 trier les deux fichiers et l'utilisation de comm n'est pas suffisant, car dans ce cas, les informations de ligne sont perdues.
Que diriez-vous d'utiliser DIFF, même si vous ne voulez pas de 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
grep -Fxf file1 file2
-F
signifie correspondance des chaînes simples (pas non plus), -x
ne signifie que des matchs de ligne entiers, -f
signifie prendre des "motifs" (i.e. lignes) du fichier nommé comme argument
Je ne pense pas qu'il y ait une seule commande qui fait ce que vous voulez faire. Vous pouvez essayer de combiner la sortie de diff
avec grep
, cependant. Si vos fichiers texte ne contiennent aucun des caractères |
, <
, >
, ce qui suit vous donne une sortie un peu utile:
$ diff --side-by-side a b | grep -n -v "[|<>]"
3:Hello Hello
4:World World
comm
peut être utilisé. man comm
Pour toutes les options, mais vous voudrez utiliser comm -12 ...
Pour afficher uniquement des lignes existantes dans les deux intrants.
Comme les gens l'ont souligné, vous devez transmettre votre contribution à travers sort
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 analysent la syntaxe de différentes langues, de sorte que des choses comme des variables renommées puissent être considérées comme inchangées.
Il est emballé comme similarity-tester
à Debian et Ubuntu.