Dados dos archivos, quiero escribir un script de shell que lea cada línea del archivo1 y compruebe si está allí en el archivo2. Si no se encuentra una línea, debería generar dos archivos diferentes y salir. Los archivos pueden contener palabras, números o cualquier cosa. Por ejemplo :
archivo1:
Hi!
1234
5678
1111
hello
file2:
1111
5678
1234
Hi!
hello
En este caso, dos archivos deberían ser iguales. si file2 tiene "hola !!!" en lugar de "hola", entonces los archivos son diferentes. Estoy usando el script bash. Cómo puedo hacer esto. No es importante que deba hacerlo en un bucle anidado, pero eso es lo que pensé que es la única forma. Gracias por tu ayuda.
sort
no le importan los contenidos exactos a menos que se lo indique.--brief
y agregar opciones de formato, por ejemplo-u
.diff
establece su estado de salida para indicar si los archivos son iguales o no. Se puede acceder al estado de salida en la variable especial$?
. Puede ampliar la respuesta de Ignacio de esta manera:fuente
if diff ... >/dev/null
prescindir de los corchetes y la variable.Agregando esto porque creo que [[]] && || la construcción es bastante ordenada:
fuente
También debería funcionar:
Creo que esto es suficiente personajes para una respuesta ...
fuente
Si bien
diff
es una respuesta perfectamente buena, probablemente usaríacmp
en su lugar, que es específicamente para hacer una comparación byte por byte de dos archivos.https://linux.die.net/man/1/cmp
Debido a esto, tiene la ventaja adicional de poder comparar archivos binarios.
Me hacen creer que es más rápido que usarlo,
diff
aunque no lo he probado personalmente.fuente