Comm
Originalautor (en) | Lee E. McMahon |
---|---|
Entwickler (en) | AT & T Bell Laboratories, Richard Stallman, David Mackenzie |
Erstveröffentlichung | November 1973 |
Geschrieben in | C |
Betriebssystem | Unix, Unix-artig, Plan 9, Inferno |
Plattform | Plattformübergreifend |
Typ | Befehl |
Lizenz | CoreUtils: GPLV3+ Plan 9: MIT -Lizenz |
Das Comm Befehl in der Unix Computerfamilie Betriebssysteme ist ein Dienstprogramm, das zum Vergleich von zwei verwendet wird Dateien für gemeinsame und unterschiedliche Linien. Comm ist in der angegeben Posix Standard. Es war weit verbreitet auf Unix-artig Betriebssysteme seit Mitte bis Ende der 1980er Jahre.
Geschichte
Geschrieben von Lee E. McMahon, Comm Erschienen zuerst in Version 4 Unix.[1]
Die Version von Comm gebündelt GNU CoreUtils wurde geschrieben von Richard Stallman und David Mackenzie.[2]
Verwendungszweck
Comm liest zwei Dateien als Eingabe, die als Textzeilen betrachtet werden. Comm Gibt eine Datei aus, die drei Spalten enthält. Die ersten beiden Spalten enthalten Zeilen, die für die erste bzw. zweite Datei eindeutig sind. Die letzte Spalte enthält beides Linien. Dies ist funktional ähnlich wie diff.
Säulen werden typischerweise mit dem unterschieden
Für Effizienz standardmäßigen Implementierungen von Comm Erwarten Sie, dass beide Eingabedateien in derselben Zeile sequenziert werden Kollation Bestellung, lexikalisch sortiert. Das sortieren (Unix) Der Befehl kann für diesen Zweck verwendet werden.
Das Comm Algorithmus verwendet die Sammelsequenz des Stroms Gebietsschema. Wenn die Zeilen in den Dateien nicht beide gemäß dem aktuellen Gebietsschema zusammengestellt werden, ist das Ergebnis undefiniert.
Rückgabe Code
nicht wie diff, der Rückgabecode von Comm hat keine logische Bedeutung für die Beziehung der beiden Dateien. Ein Rückgabecode von 0 zeigt den Erfolg an, ein Rückgabecode> 0 zeigt einen Fehler an, der während der Verarbeitung aufgetreten ist.
Beispiel
$ Katze FooApfel Banane Aubergine $ KatzenleisteApfel Banane Banane Zucchini $ Comm Foo Bar Apfel Banane Banane Aubergine Zucchini
Dies zeigt, dass beide Dateien eine Banane haben, aber nur Bar hat eine zweite Banane.
Ausführlicher ist die Ausgabedatei das folgende Erscheinungsbild. Beachten Sie, dass die Spalte durch die Anzahl der führenden Registerkarten -Zeichen interpretiert wird. \ t repräsentiert ein Registerkartenzeichen und \ n repräsentiert eine neue Linie (Escape Charakter#Programmierung und Datenformate).
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | \t | \t | a | p | p | l | e | \n | ||
1 | \t | \t | b | a | n | a | n | a | \n | |
2 | \t | b | a | n | a | n | a | \n | ||
3 | e | g | g | p | l | a | n | t | \n | |
4 | \t | z | u | c | c | h | i | n | i | \n |
Vergleich zu Diff
Allgemein gesagt, diff ist ein leistungsfähigeres Nutzen als Comm. Je einfacher Comm ist am besten für die Verwendung in Skripten geeignet.
Die primäre Unterscheidung zwischen Comm und diff ist das Comm Verwaltet Informationen über die Reihenfolge der Zeilen vor dem Sortieren.
Ein kleiner Unterschied zwischen Comm und diff ist das Comm Wird nicht versuchen, anzuzeigen, dass eine Zeile zwischen den beiden Dateien "geändert" hat; Die Zeilen sind entweder in "aus Datei #1", "aus Datei #2" oder "in beiden" Spalten angezeigt. Dies kann nützlich sein, wenn man möchte, dass zwei Zeilen als anders betrachtet werden, selbst wenn sie nur subtile Unterschiede aufweisen.
Andere Optionen
Comm hat Befehlszeilenoptionen Unterdrückung eines der drei Säulen. Dies ist nützlich für das Skripten.
Es gibt auch eine Option, um eine Datei (aber nicht beides) aus Standardeingaben zu lesen.
Grenzen
Bis zu einer vollständigen Zeile muss während des Zeilenvergleichs von jeder Eingabedatei gepuffert werden, bevor die nächste Ausgabezeile geschrieben wird.
Einige Implementierungen lesen Zeilen mit der Funktion ReadlineBuffer () Was keine Leitungslängengrenzen auferlegt, wenn der Systemspeicher ausreicht.
Andere Implementierungen lesen Zeilen mit der Funktion fgets(). Diese Funktion erfordert einen festen Puffer. Für diese Implementierungen wird der Puffer häufig nach dem dimensioniert Posix Makro Line_max.
Siehe auch
- Vergleich von Dateivergleichstools
- Liste der UNIX -Befehle
- CMP (UNIX) - Charakterorientierter Dateivergleich
- Schnitt (Unix) -Spalten-orientierte Dateien aufgeteilt
Verweise
- ^ McIlroy, M. D. (1987). A Research Unix Reader: Annotierte Auszüge aus dem Programmierhandbuch, 1971–1986 (PDF) (Technischer Bericht). Cstr. Bell Labs. 139.
- ^ "Comm (1): Vergleichen Sie zwei sortierte Dateienzeile nach Zeile - Linux Man Page".
Externe Links
- Die einzelne Unix -Spezifikation, Version 4 von Die offene Gruppe : Wählen oder ablehnen Sie Zeilen aus, die mit zwei Dateien gemeinsam sind - Shell and Utilities Referenz,
- Plan 9 Programmierhandbuch, Volume 1 - -
- Inferno Allgemeine Befehle Handbuch - -