75 votes

trouver la différence entre deux fichiers texte avec un élément par ligne

J'ai deux fichiers:

fichier 1

 dsf
sdfsd
dsfsdf
 

fichier 2

 ljljlj 
lkklk 
dsf
sdfsd
dsfsdf
 

Je veux afficher ce qui est dans le fichier 2 mais pas dans le fichier 1, donc le fichier 3 devrait ressembler à

 ljljlj 
lkklk 
 

137voto

dogbane Points 85749
 grep -Fxvf file1 file2
 

Que signifient les drapeaux:

 -F, --fixed-strings
              Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched.    
-x, --line-regexp
              Select only those matches that exactly match the whole line.
-v, --invert-match
              Invert the sense of matching, to select non-matching lines.
-f FILE, --file=FILE
              Obtain patterns from FILE, one per line.  The empty file contains zero patterns, and therefore matches nothing.
 

46voto

krico Points 2368

Tu peux essayer

 grep -f file1 file2
 

ou

 grep -v -f file1 file2
 

39voto

dogbane Points 85749

Vous pouvez utiliser la commande comm pour comparer deux fichiers triés.

 comm -13 <(sort file1) <(sort file2)
 

12voto

Luca Borrione Points 3038

J'ai utilisé avec succès

 diff "${file1}" "${file2}" | grep "<" | sed 's/^<//g'  > "${diff_file}"
 

exporter la différence dans un fichier

8voto

Nate Points 6155

si vous les attendez dans un certain ordre, vous pouvez simplement utiliser diff

diff file1 file2 | grep ">"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X