Bei zwei Dateien möchte ich ein Shell-Skript schreiben, das jede Zeile aus Datei1 liest und prüft, ob sie in Datei2 vorhanden ist. Wenn eine Zeile nicht gefunden wird, sollten zwei unterschiedliche Dateien ausgegeben und beendet werden. Die Dateien können Wörter, Zahlen oder irgendetwas enthalten. Beispielsweise :
Datei1:
Hi!
1234
5678
1111
hello
Datei2:
1111
5678
1234
Hi!
hello
In diesem Fall sollten zwei Dateien gleich sein. wenn file2 "hallo !!!" Anstelle von "Hallo" sind die Dateien unterschiedlich. Ich benutze Bash-Skript. Wie kann ich das machen. Es ist nicht wichtig, dass ich es in einer verschachtelten Schleife tun muss, aber ich dachte, das ist der einzige Weg. Danke für Ihre Hilfe.
sort
kümmert sich nicht um den genauen Inhalt, es sei denn, Sie sagen es.--brief
und Hinzufügen von Formatoptionen, z-u
.diff
Legt den Exit-Status fest, um anzuzeigen, ob die Dateien identisch sind oder nicht. Der Exit-Status ist in der speziellen Variablen zugänglich$?
. Sie können Ignacios Antwort folgendermaßen erweitern:quelle
if diff ... >/dev/null
auf die Klammern und Variablen verzichten.Füge dies hinzu, weil ich denke, dass [[]] && || Konstrukt ist ziemlich ordentlich:
quelle
Sollte auch funktionieren:
Ich denke, das sind genug Zeichen für eine Antwort ...
quelle
Obwohl dies
diff
eine vollkommen gute Antwort ist, würde ich sie wahrscheinlichcmp
stattdessen verwenden, um einen Byte-für-Byte-Vergleich zweier Dateien durchzuführen.https://linux.die.net/man/1/cmp
Aus diesem Grund hat es den zusätzlichen Vorteil, Binärdateien vergleichen zu können.
Ich glaube, es ist schneller als die Verwendung,
diff
obwohl ich das nicht persönlich getestet habe.quelle