2010-05-14 17 views
10

Come posso ottenere il seguente output utilizzando il comando linux confrontando due file di testo? Grazie.confrontare due file e ottenere l'output per le stesse linee

file1:

site110 
site120 

file2 (Aggiornato):

domain1.com - site110 
domain2.com - site111 
domain3.com - site112 
domain4.com - site113 
domain5.com - site120 
domain6.com - site1201 
domain7.com - site1202 

uscita:

domain1.com - site110 
domain5.com - site120 

se uso:

grep -f file1 file2 

l'uscita sarà:

domain1.com - site110 
domain5.com - site120 
domain6.com - site1201 
domain7.com - site1202 

che le ultime due righe non sono quello che voglio. Grazie.

+0

Non è necessario aggiungere "[SOLVED]", il sistema ha i propri indicatori. –

+0

Grazie. Adoro il sistema SO. :) – garconcn

+0

Non riesco a far funzionare 'grep -f' qui, ma se aggiungo' -w' al comando 'grep' funziona. – Thor

risposta

13

Dal grep manpage:

-f FILE, --file=FILE 
      Obtain patterns from FILE, one per line. The empty file 
      contains zero patterns, and therefore matches nothing. (-f is 
      specified by POSIX.) 

Pertanto:

grep -f file1 file2 

domain1.com - site110 
domain5.com - site120 
+0

Ho provato grep -f file1 file2 prima, ma non ha funzionato sul mio script. Ho pensato che non funzionasse. Ora, ho risolto il mio script. Grazie. – garconcn

+0

Questo corrisponde a 'site1201' qui, ma se aggiungo' -w' al comando 'grep' funziona. – Thor

0

Che ne dici di diff?

+0

All'inizio pensavo che diff potesse risolvere il mio problema, ma non so quale opzione usare. Grazie. – garconcn

0

Può essere man paste? Può essere necessaria qualche elaborazione di output.

3

Utilizzare il comando comm.

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

Questo comando è più preciso di grep -f.

+0

Amo questo, grazie! Funziona bene anche per le directory: comm -12 <(ls -1 dir1/| sort) <(ls -1 dir2/| sort) – Nitro

1

Penso che stiate cercando una specie di funzione di join del database. Unix ha un comando per questo: join. Nel tuo caso:

join -1 1 -2 3 -t " " -o 2.1,2.2,2.3 file1 file2 
Problemi correlati