Pregunta

Supongamos que tengo dos listas de números en los archivos f1, f2, cada número uno por línea. Quiero ver cuántos números en la primera lista no están en la segunda y viceversa. Actualmente estoy usando grep -f f2 -v f1 y luego repito esto usando un script de shell. Esto es bastante lento (el tiempo cuadrático duele). ¿Hay una forma más agradable de hacer esto?

¿Fue útil?

Solución

Me gusta 'com' para este tipo de cosas. (los archivos deben ser ordenados.)

$ 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
$ 

Otros consejos

¿No podrías poner cada número en una sola línea y luego diff (1)? Es posible que deba ordenar las listas de antemano, aunque para que funcione correctamente.

En el caso especial donde un archivo es un subconjunto del otro , lo siguiente:

cat f1 f2 | sort | uniq -u

listaría las líneas solo en el archivo más grande. Y, por supuesto, la canalización a wc -l mostrará el recuento.

Sin embargo, eso no es exactamente lo que describiste.

Este one-liner satisface mis necesidades particulares a menudo, pero me encantaría ver una solución más general.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top