Devi usare comm
:
comm -13 first.txt second.txt
farà il lavoro.
p.s. l'ordine del primo e del secondo file nella riga di comando è importante.
inoltre potrebbe essere necessario ordinare i file prima:
comm -13 <(sort first.txt) <(sort second.txt)
nel caso in cui i file siano numerici aggiungere -n
opzione a sort
.
Dovrebbe funzionare
comm -13 <(sort file1) <(sort file2)
Sembra che sort -n (numerico) non possa funzionare con comm, che utilizza internamente sort (alfanumerico)
f1.txt
1
2
21
50
f2.txt
1
3
21
50
21 dovrebbe apparire nella terza colonna
#WRONG
$ comm <(sort -n f1.txt) <(sort -n f2.txt)
1
2
21
3
21
50
#OK
$ comm <(sort f1.txt) <(sort f2.txt)
1
2
21
3
50
cat f1.txt f2.txt | sort |uniq > file3
grep -Fxv -f first-file.txt second-file.txt
Fondamentalmente cerca tutte le righe in second-file.txt
che non corrispondono a nessuna riga in first-file.txt
. Potrebbe essere lento se i file sono di grandi dimensioni.
Inoltre, una volta ordinati i file (usa sort -n
se sono numerici), allora comm
dovrebbe anche aver funzionato. Che errore dà? Prova questo:
comm -23 second-file-sorted.txt first-file-sorted.txt