16 Stimmen

Vergleichsfunktion, die zwei Textdateien in Unix vergleicht

Ich habe mich gefragt, ob mir jemand sagen könnte, ob es in Unix, Bash eine Funktion gibt, die alle Zeilen der Dateien vergleicht. Wenn sie unterschiedlich sind, sollte sie true/false oder -1,0,1 ausgeben. Ich weiß, dass solche cmp-Funktionen in anderen Sprachen existieren. Ich habe in den Man-Pages gesucht, war aber erfolglos. Wenn es nicht verfügbar ist, könnte mir jemand helfen, eine alternative Lösung zu finden?

Danke

38voto

David W. Punkte 101611

Es gibt verschiedene Möglichkeiten, dies zu tun:

  • cmp -s file1 file2: Schauen Sie auf den Wert von $?. Null, wenn beide Dateien übereinstimmen oder andernfalls nicht null.
  • diff file1 file2 > /dev/null: Einige Formen des diff-Befehls können einen Parameter akzeptieren, der besagt, dass nichts ausgegeben werden soll. Die meisten tun dies jedoch nicht. Immerhin verwenden Sie diff, um die Unterschiede zwischen zwei Dateien zu sehen. Wieder wird der Exit-Code (Sie können den Wert von $? überprüfen) 0 sein, wenn die Dateien übereinstimmen, und andernfalls nicht null.

Sie können diese Befehle in einer Shell-If-Anweisung verwenden:

if cmp -s file1 file2
then
   echo "Die Dateien stimmen überein"
else
   echo "Die Dateien sind unterschiedlich"
fi

Der diff-Befehl ist speziell für Textdateien gemacht. Der cmp-Befehl sollte auch mit allen Binärdateien funktionieren.

7voto

Es gibt einen einfachen cmp Datei Datei Befehl, der genau das tut. Es gibt 0 zurück, wenn sie gleich sind, und 1, wenn sie unterschiedlich sind, daher ist es trivial, es in if-Anweisungen zu verwenden:

if cmp Datei1 Datei2; then
    ...
fi

Ich hoffe, das hilft =)

2voto

kris Punkte 377
#!/bin/bash

file1=old.txt
file2=new.txt

echo " TEST 1 : "
echo

if [ $( cmp -s ${file1} ${file2}) ]
then
   echo "Die Dateien passen zusammen :  ${file1} - ${file2}"
else
   echo "Die Dateien sind unterschiedlich :  ${file1} - ${file2}"
fi

echo
echo " TEST 2 : "
echo
bool=$(cmp -s "$file1" "$file2" )
if cmp -s "$file1" "$file2"
then
   echo "Die Dateien passen zusammen"
else
   echo "Die Dateien sind unterschiedlich"
fi

echo
echo " TEST 3 : md5 / md5sum - Berechnung und Überprüfung des MD5-Hashwertes"
echo

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

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

# or md5sum hängt von deinem Linux-Flavour ab :D
#md1=$(md5sum ${file1});
#md2=$(md5sum ${file2});

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

echo $md1
echo $mdd1
echo $md2
echo $mdd2
echo

#if [ $mdd1 = $mdd2 ]; 
if [ $mdd1 -eq $mdd2 ]; 
then
   echo "Die Dateien passen zusammen :  ${file1} - ${file2}"
else
   echo "Die Dateien sind unterschiedlich :  ${file1} - ${file2}"
fi

0voto

Jeremy J Starcher Punkte 22465

Du könntest ein md5 auf den beiden Dateien durchführen und dann die Ergebnisse in bash vergleichen.

Hier gibt es keine Unix-Box zum Testen, aber das sollte richtig sein.

#!/bin/bash

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

if [ $md1 -eq $ $md2 ]; then
  echo Gleich
else
  echo Unterschiedlich
fi

0voto

sovick konar Punkte 1

Echo "erste Datei lesen" lesen f1 echo "zweite Datei lesen" lesen f2

diff -s f1 f2 # gibt aus, ob beide Dateien identisch sind

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X