Confronto di due elenchi con uno script di shell
-
05-07-2019 - |
Domanda
Supponiamo di avere due elenchi di numeri nei file f1, f2, ognuno dei quali uno per riga. Voglio vedere quanti numeri nella prima lista non sono nella seconda e viceversa. Attualmente sto usando grep -f f2 -v f1 e poi lo ripeto usando uno script di shell. È piuttosto lento (il tempo quadratico fa male). C'è un modo migliore per farlo?
Soluzione
Mi piace 'comm' per questo genere di cose. (i file devono essere ordinati.)
$ cat f1
1
2
3
$ cat f2
1
4
5
$ comm f1 f2
1
2
3
4
5
$ comm -12 f1 f2
1
$ comm -23 f1 f2
2
3
$ comm -13 f1 f2
4
5
$
Altri suggerimenti
Non potresti semplicemente mettere ogni numero in una sola riga e poi diff
(1)? Potrebbe essere necessario ordinare prima gli elenchi, anche se per farlo funzionare correttamente.
Nel caso speciale in cui un file è un sottoinsieme dell'altro , quanto segue:
cat f1 f2 | sort | uniq -u
elenca le righe solo in il file più grande. E ovviamente il piping su wc -l
mostrerà il conteggio.
Tuttavia, non è esattamente quello che hai descritto.
Questo one-liner soddisfa spesso le mie esigenze particolari, ma mi piacerebbe vedere una soluzione più generale.