2011-01-17 41 views
9

Me gustaría comparar dos archivos [sin clasificar] file1 y file2. Me gustaría hacer el archivo2 - archivo1 [la diferencia] independientemente del número de línea? diff no funciona.comparar dos archivos en UNIX

+0

¿Ha considerado la clasificación y luego comparar? –

+0

Diff no funciona? Diff debería funcionar. ¿Cuál es el error? –

+0

No se está programando ... Mover al superusuario. – leppie

Respuesta

19

Tengo la solución mediante el uso de comunicaciones

comm -23 file1 file2 

le dará la salida deseada.

Los archivos deben ordenarse primero de todos modos.

+1

De acuerdo con ['comm' man page] (http://netbsd.gw.com/cgi-bin/man-cgi?comm++NetBSD- current), funciona en archivos ordenados léxicamente. Por lo tanto, primero tendrá que usar 'sort' en sus archivos. – tonio

+0

Como se indica en [comentario de amalloy] (http://stackoverflow.com/questions/4715885/compare-two-files-in-unix/4756123#comment24120178_4715952) para 'diff', también puede decir' comm -23 <(ordenar archivo1) <(ordenar archivo2) '. – fedorqui

1

Forma más fácil: ordena los archivos con clasificación (1) y luego usa diff (1).

17

Bueno, primero puede ordenar los archivos y diferenciar los archivos ordenados.

sort file1 > file1.sorted 
sort file2 > file2.sorted 
diff file1.sorted file2.sorted 

También puede filtrar la salida reportar líneas en fichero2 que están ausentes en archivo1:

diff -u file1.sorted file2.sorted | grep "^+" 

Como se indica en los comentarios, de hecho, no es necesario ordenar los archivos. En su lugar, se puede utilizar un proceso de sustitución y decir:

diff <(sort file1) <(sort file2) 
+3

Por cierto, bash tiene un atajo para los primeros tres comandos juntos: 'diff <(sort file1) <(sort file2)'. – amalloy

2

Hay comandos básicos para comparar archivos en UNIX:

  1. cmp: Este comando se utiliza para comparar dos archivos byte a byte y como se produce ningún desajuste, que se hace eco de que en la pantalla. si no hay desajuste, no respondo. sintaxis: $ cmp archivo1 archivo2.

  2. comm: Este comando se utiliza para averiguar los registros disponibles en uno y en otro no

  3. diff

+0

para agregar a esto, cmp se usa solo en datos ordenados. –