Tengo dos archivos casi idénticos,"foo" y "barra".
Cada archivo tiene miles de líneas, un número por línea.
Si yo sort
y luego diff
ambos archivos, este es el resultado:
$ diff foo bar
5984a5985,5986
> 15676
> 15677
7703,7706d7704
< 17486
< 17487
< 17488
< 17489
Sin embargo, si compro grep -Fvf
ambos archivos, obtengo cero "no coincidencias" en ambas direcciones:
$ grep -Fvf foo bar
$ grep -Fvf bar foo
$
¿Porqué es eso? ¿No debería obtener resultados similares a las diferencias? Esperaría que el primer comando me devolviera la "primera mitad" de los valores en diff, y que el segundo comando grep me devolviera el resto.
¿Por qué no obtengo los resultados esperados?
Respuesta1
Porque , diff
a diferencia degrep -Fvf
El orden en que aparecen las líneas importa.. Además, dado que la -x
opción no estaba incluida en el comando grep, las líneas con simplescoincidencias parcialesquedan excluidos de la salida.
Ejemplo reproducible
Considere estos dos archivos:
$ cat foo
156
174
15676
17486
17487
$ cat bar
15677
15678
156
174
15676
El diff
comando muestra que son diferentes, mientras que los grep
comandos no producen ningún resultado:
$ diff foo bar
0a1,2
> 15677
> 15678
4,5d5
< 17486
< 17487
$ grep -Fvf foo bar; grep -Fvf bar foo
Si tuviéramos que agregar -x
para requerir coincidencias de línea completa, entonces grep produce:
$ grep -Fvxf foo bar
15677
15678
$ grep -Fvxf bar foo
17486
17487
Sugerencia adicional
Comoabligiendosugiere en los comentarios, diff -u
produce más contexto que puede hacer que el resultado sea más fácil de entender.