2011-01-17 14 views
9

Vorrei confrontare due file [non selezionati] file1 e file2. Mi piacerebbe fare file2 - file1 [la differenza] indipendentemente dal numero di riga? diff non funziona.confrontare due file in UNIX

+0

Avete considerato l'ordinamento e quindi il confronto? –

+0

Diff non funziona? Diff dovrebbe funzionare. qual è l'errore? –

+0

Non programmare ... Passare a superutente. – leppie

risposta

19

ho avuto la soluzione utilizzando comm

comm -23 file1 file2 

vi darà l'output desiderato.

I file devono essere ordinati prima comunque.

+1

In base alla [Pagina man di comando] (http://netbsd.gw.com/cgi-bin/man-cgi?comm++NetBSD-current), funziona su file ordinati lessicalmente. Quindi, dovrai prima usare 'sort' sui tuoi file. – tonio

+0

Come indicato dal [commento di amalloy] (http://stackoverflow.com/questions/4715885/compare-two-files-in-unix/4756123#comment24120178_4715952) per 'diff', puoi anche dire' comm -23 <(ordina file1) <(ordina file2) '. – fedorqui

1

Il modo più semplice: ordinare i file con ordinamento (1) e quindi utilizzare diff (1).

17

Bene, è possibile ordinare i file per primi e diffare i file ordinati.

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

È inoltre possibile filtrare l'output di segnalare linee in file2 che sono assenti da file1:

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

Come indicato nei commenti, è in realtà non c'è bisogno di ordinare i file. Invece, è possibile utilizzare una sostituzione di processo e dire:

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

A proposito, bash ha una scorciatoia per i primi tre comandi insieme: 'diff <(ordinamento file1) <(ordinamento file2)'. – amalloy

2

ci sono comandi di base per confrontare i file in UNIX:

  1. cmp: questo comando viene utilizzato per confrontare due file byte per byte e si verifica eventuali disallineamenti, fa eco sullo schermo. se non si verifica alcuna mancata corrispondenza, non darò risposta. Sintassi : $ cmp file1 file2.

  2. comm: Questo comando viene utilizzato per scoprire i record disponibili in uno, ma non in un altro

  3. diff

+0

per aggiungere sopra questo, cmp viene utilizzato solo su dati ordinati. –