Shell-Script - Inhalt zweier Dateien vergleichen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
m@ddin
Beiträge: 203
Registriert: 28.05.2006 20:43:10
Kontaktdaten:

Shell-Script - Inhalt zweier Dateien vergleichen

Beitrag von m@ddin » 01.04.2008 13:21:39

Hi Leute!

Wie kann ich in einem Shell-Script den Inhalt zweier Dateien vergleichen? Es gibt ja den Befehl "cmp", der den Inhalt zweier Dateien Byte für Byte vergleicht. Im Grunde habe ich zwei Textdateien, in denen eine Zahl gespeichert ist. Jetzt würde ich gerne wissen, ob sich diese Zahlen unterscheiden. Wie baue ich das aber jetzt zusammen mit dem cmp-Befehl in eine Abfragen ein?

Danke & viele Grüße,
Martin

Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Shell-Script - Inhalt zweier Dateien vergleichen

Beitrag von mistersixt » 01.04.2008 13:28:56

Zum Vergleichen von Text-Dateien ist "diff" wohl die geeignete Variante, anschliessend noch mit etwas sed/awk die Ausgabe verwursteln. Gib doch mal ein konkretes Beispiel an, das würde die Hilfe vereinfachen.

Gruss, mistersixt.
--
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE

m@ddin
Beiträge: 203
Registriert: 28.05.2006 20:43:10
Kontaktdaten:

Re: Shell-Script - Inhalt zweier Dateien vergleichen

Beitrag von m@ddin » 01.04.2008 13:48:57

Hi!

Also die Textdateien sind beide so aufgebaut:

Datei 1:

Code: Alles auswählen

At Revision 325.
Datei 2:

Code: Alles auswählen

At Revision 326.
So, im Grunde müsste ich jetzt wissen, ob sich die Datei 2 von der Datei 1 unterscheidet. Mein Problem ist eigentlich nur, wie ich das in einem Shell-Skript abfrage?

Code: Alles auswählen

if [diff /home/svn/revision_curr /home/svn/revision_new > 0]  // <- Den Teil weiß ich nicht, wie ich aufbauen soll!?
 echo "unterschiedlich";
fi
Danke & viele Grüße,
Martin

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: Shell-Script - Inhalt zweier Dateien vergleichen

Beitrag von roli » 01.04.2008 14:22:43

Hi,

ungetestet!

Code: Alles auswählen

diff /home/svn/revision_curr /home/svn/revision_new > /dev/null 2>&1
rc = $?
if [ "$rc" -eq 0 ]
  echo "gleich"
else
  echo "ungleich"
fi
mit $? wird übrigens der Returncode des letzten ausgefuehrten Programms abgefragt.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Shell-Script - Inhalt zweier Dateien vergleichen

Beitrag von Meillo » 01.04.2008 15:24:08

für reine Vergleiche nimmt man üblicherweise `cmp' das gibt einen Errorcode von größer Null zurück, wenn die Dateien verschieden sind.

Code: Alles auswählen

if [ `cmp file1 file2` ] ; then
  echo "gleich";
else
  echo "ungleich";
fi
Use ed once in a while!

m@ddin
Beiträge: 203
Registriert: 28.05.2006 20:43:10
Kontaktdaten:

Re: Shell-Script - Inhalt zweier Dateien vergleichen

Beitrag von m@ddin » 01.04.2008 15:51:01

Hi!

Funktioniert fast :) So läuft es jetzt:

Code: Alles auswählen

diff /home/svn/revision_curr /home/svn/revision_new > /dev/null 2>&1
if [ $? -eq 0] then
   echo "Still at latest version";
else
   svn update /home/svn/project1 >> /home/svn/project1_update_log.txt
   cat /home/svn/revision_new > /home/svn/revision_curr
fi
rm /home/svn/revision_new
Der springende Punkt war $? :)

Danke dir und viele Grüße,
Martin

Benutzeravatar
Leonidas
Beiträge: 2032
Registriert: 28.04.2003 13:48:49
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: Shell-Script - Inhalt zweier Dateien vergleichen

Beitrag von Leonidas » 02.04.2008 11:51:09

Du wolltest wirklich besser ``cmp`` verwenden, da es sinnlos ist die Unterschiede generieren zu lassen, nur um sie dann sofort zu verwerfen.
Wir wollten einen Marsch spielen, aber wir hatten nur Xylophone.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: Shell-Script - Inhalt zweier Dateien vergleichen

Beitrag von roli » 02.04.2008 13:09:43

Hi,

du koenntest natuerlich auch die md5 Summe, oder irgend einen anderen Hashwert der Dateien bilden, und die dann miteinander vergleichen. Versuch mal was schneller ist, diff, cmp oder md5. Ich kann's jedenfalls nicht sagen.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Shell-Script - Inhalt zweier Dateien vergleichen

Beitrag von Meillo » 02.04.2008 17:15:19

roli hat geschrieben:Versuch mal was schneller ist, diff, cmp oder md5. Ich kann's jedenfalls nicht sagen.
Ganz sicher `cmp', weil dessen Implementierung "straight-forward" ist, ohne Ecken und Haken.
Use ed once in a while!

Antworten