2012-10-04 74 views
13

Me preguntaba si alguien podría decirme si hay una función disponible en Unix, bash que compara todas las líneas de los archivos. Si son diferentes, debe dar como resultado verdadero/falso, o -1,0,1. Sé que estas funciones cmp existen en otros idiomas. He estado buscando en las páginas del manual pero no he tenido éxito. Si no está disponible, ¿alguien podría ayudarme a encontrar una solución alternativa?Función de comparación que compara dos archivos de texto en Unix

Gracias

+0

'diff -u fichero1 file2' Nota: La salida de diff puede (y será) ser utilizado por el 'patch' program para" editar "file1 en file2 (o viceversa) – wildplasser

Respuesta

1

Puede utilizar diff, que da salida a la diferencia entre los dos archivos y de retorno 1 si son diferentes, 0 si son la misma.

$> echo toto > file1; echo tota file2; diff file1 file2 
1c1 
< toto 
--- 
> tota 
+0

¿Puedes explicar esto un poco mejor? toto y tota son ...? – Masterminder

+0

cadenas que salgo en un archivo. Luego comparo cada archivo, archivo1 que contiene toto, archivo2 que contiene tota. – tomahh

+0

y luego el < toto --- > tota? thx por cierto – Masterminder

0

Usted podría hacer un md5 en los dos archivos, y luego comparar los resultados en bash.

No Unix cuadro aquí para probar, pero esto debería ser correcto.

#!/bin/bash 

md1=$(md5 file1); 
md2=$(md5 file2); 

if [ $md1 -eq $ $md2 ]; then 
    echo The same 
else 
    echo Different 
fi 
3

Existe un simple comando cmp file file que hace precisamente eso. Devuelve 0 si son iguales, y 1 si son diferentes, por lo que es trivial para utilizar en if s:

if cmp file1 file1; then 
    ... 
fi 

espero que esto ayude =)

+1

simplemente me gana. :-) Agregar una opción '-s' asegurará que sea silenciosa para diferentes archivos y solo proporciona el código de retorno para que no obtenga salida adicional – TaninDirect

31

Hay varias maneras de hacer esto:

  • cmp -s $file1 $file2: Mire el valor de $?. Cero si ambos archivos coinciden o no son cero en caso contrario.
  • diff $file1 $file2 > /dev/null: Algunas formas del comando diff pueden tomar un parámetro que le indica que no genere ningún resultado. Sin embargo, la mayoría no. Después de todo, usa diff para ver las diferencias entre dos archivos. Una vez más, el código de salida (se puede comprobar el valor de $? será 0 si los archivos coinciden y no cero en caso contrario

Puede utilizar estos comandos en una cáscara si declaración:.

if cmp -s "$file1" "$file2" 
then 
    echo "The files match" 
else 
    echo "The files are different" 
fi 

el comando diff se hace específicamente para archivos de texto. el comando cmp debe trabajar con todos los archivos binarios también.

1
#!/bin/bash 

file1=old.txt 
file2=new.txt 

echo " TEST 1 : " 
echo 

if [ $(cmp -s ${file1} ${file2}) ] 
then 
    echo "The files match" 
else 
    echo "The files are different" 
fi 

echo 
echo " TEST 2 : " 
echo 
bool=$(cmp -s "$file1" "$file2") 
if cmp -s "$file1" "$file2" 
then 
    echo "The files match" 
else 
    echo "The files are different" 
fi 

echo 
echo " TEST 3 : " 
echo 

md1=$(md5 ${file1}); 
md2=$(md5 ${file2}); 

mdd1=$(echo $md1 | awk '{print $4}') 
mdd2=$(echo $md2 | awk '{print $4}') 
echo $md1 
echo $mdd1 
echo $md2 
echo $mdd2 
echo 

if [ $mdd1 = $mdd2 ]; 
then 
    echo "The files match" 
else 
    echo "The files are different" 
fi 
0

echo "leer primer archivo" lectura f1 echo "leer segundo archivo" leer f2

diff -s f1 # impresiones f2 si los dos archivos son idénticos

Cuestiones relacionadas