2011-12-22 9 views
9

Sto cercando di utilizzare comm per calcolare la differenza tra due file ordinati, tuttavia il risultato non ha senso, cosa c'è che non va? Voglio mostrare le stringhe che esiste in test2 ma non test1, e poi mostrare le corde che esistono in test1 ma non test2utilizzando comm a diff due file

 
>test1 
a 
b 
d 
g 

>test2 
e 
g 
k 
p 

>comm test1 test2 
a 
b 
d 
    e 
g 
    g 
    k 
    p 

risposta

13

Per mostrare le linee che esistono in test2 ma non in test1, scrivere uno di questi:

comm -13 test1 test2 
comm -23 test2 test1 

(-1 nasconde la colonna con linee che esistono solo nel primo file, -2 nasconde la colonna con linee che esistono solo nel secondo file; -3 nasconde la colonna con linee che esistono in entrambi i file)

E, viceversa per mostrare le linee che esistono in test1 ma non in test2..

noti che g su una riga da solo è considerato distinto dal g con uno spazio dopo di esso, che è il motivo per cui si ottiene

g 
    g 

invece di

 g 
+2

Una buona presa che trova lo spazio finale. – sarnold

2

Aggiungere un carattere in comune tra i 2 file, dire 'z' alla fine . Vedrai che appare una terza colonna, per indicare che quel valore è comune a entrambi.

L'output è destinato a mostrare "i dati in col1 è uniq a file1", mentre "i dati in col2 sono univoci a file2".

Infine, gli argomenti di comando '-1, -2, -3' indicano l'output di soppressione dalla colonna numerata fornita, ad esempio -1.

Spero che questo aiuti.

+0

@shelter: G è il comune carattere, comunque dovevano esserci alcuni caratteri nascosti nei file che commettevano errori, riscrivo il file con le stesse lettere e il risultato è corretto ora. – user121196

+0

@ user121196: sì, scusami mi mancava quel dettaglio, non avevo gli occhiali quando ho letto il tuo post. Sono contento che tu abbia trovato una soluzione. In bocca al lupo. – shellter