2012-10-04 6 views
13

Mi chiedevo se qualcuno potesse dirmi se esiste una funzione disponibile in unix, bash che confronta tutte le linee dei file. Se sono diversi dovrebbe produrre vero/falso o -1,0,1. So che queste funzioni di cmp esistono in altre lingue. Ho guardato le pagine man ma non ho avuto successo. Se non è disponibile, qualcuno potrebbe aiutarmi a trovare una soluzione alternativa?Funzione di confronto che confronta due file di testo in Unix

Grazie

+0

'diff -u file1 file2' Nota: l'output di diff può (e vuole) essere utilizzati dal Il programma 'patch' per" modificare "file1 in file2 (o viceversa) – wildplasser

risposta

1

È possibile utilizzare diff, il quale emette la differenza tra i due file e di ritorno 1 se sono diversi, 0 se sono lo stesso.

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

puoi spiegarlo meglio? toto e tota sono ...? – Masterminder

+0

stringhe che invio in un file. Confronto quindi ogni file, file1 contenente toto, file2 contenente tota. – tomahh

+0

e poi il tota < toto --- >? thx btw – Masterminder

0

Si potrebbe fare un md5 sulle due file, quindi confrontare i risultati in bash.

Nessuna casella Unix qui da testare, ma questo dovrebbe essere corretto.

#!/bin/bash 

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

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

C'è un semplice comando cmp file file che fa proprio questo. Restituisce 0 se sono uguali e 1 se sono diversi, quindi è banale da utilizzare in if s:

if cmp file1 file1; then 
    ... 
fi 

Spero che questo aiuti =)

+1

mi ha appena battuto. :-) L'aggiunta di un'opzione '-s' farà in modo che sia silenziosa per i diversi file e fornisca solo il codice di ritorno in modo da non ottenere un output aggiuntivo – TaninDirect

31

Ci sono diversi modi per farlo:

  • cmp -s $file1 $file2: Guarda il valore di $?. Zero se entrambi i file corrispondono o non zero diversamente.
  • diff $file1 $file2 > /dev/null: alcune forme del comando diff possono assumere un parametro che indica di non emettere alcunché. Tuttavia, la maggior parte non lo fa. Dopo tutto, usi diff per vedere le differenze tra due file. Anche in questo caso, il codice di uscita (è possibile verificare il valore di $? sarà 0 se i file partita e non-zero altrimenti

è possibile utilizzare questi comando in una shell if:.

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

il comando diff è fatto appositamente per i file di testo. il comando cmp dovrebbe funzionare con tutti i file binari troppo.

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 "leggere primo file" lettura f1 echo "leggere secondo file" leggere f2

diff -s F1 F2 # stampa se entrambi i file sono identici