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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top