Ich habe comm
zwei sortierte Dateien verglichen. Jede Zeile in diesen Dateien ist eine positive Ganzzahl. Aber die Ergebnisse zeigen
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
Wie kommt es, dass der Fehler auch dann auftritt, wenn diese beiden Dateien sortiert sind?
sort
comm
numeric-data
wenzi
quelle
quelle
Antworten:
comm
erfordert eine lexikografische Sortierung (einfachsort
), keine numerische Sortierung (sort -n
). Zum Beispiel möchte es die folgende Reihenfolge:Nicht die folgende Reihenfolge:
Korrigieren Sie dies und das Problem sollte verschwinden. Weitere esoterischen Fällen , in denen
comm
‚s locale anders sein kann als diesort
locale, können Sie laufensort
undcomm
mitLC_COLLATE=C
in ihrer Umgebung nativen Byteanordnung zu verwenden.quelle
sort -n
sort
mit und ohne den-n
Schalter und zeigt nur mit dem-n
Schalter können Sie die korrekten erreichen zu erhöhen , um Sie in Ihrer eigenen Antwort erforderlich ist , bestätigen.comm
erfordert buchstäblichLC_COLLATE
d Bestellung. Es genügt zu sagen, dass die Fehler in Ihrer Antwort für Beispiele außerhalb Ihres Testsatzes nicht rein kosmetischer Natur sind ... niemand hat nach einer positiven numerischen Sortierung gefragt.AKTUALISIERTE ANTWORT:
PROBLEM:
Das OP erhält eine Fehlermeldung bezüglich " Datei ist nicht in sortierter Reihenfolge ", wenn positive Ganzzahlen in den Dateien
comm
verglichen werden, nicht Text. Wir haben es also mit Nicht-Dezimalzahlen zu tun.Kurze Antwort:
Abhängig von der Verwendung des
-n
Schalters mit demsort
Befehl zum Sortieren der gelieferten Ergebnissecomm
kann die Reihenfolge der zurückgegebenen Ergebnissecomm
sehr unterschiedlich sein:Lexografisch : Die Verwendung des
-n
Schalters mit Sortierung führt dazu, dass die "positiven Ganzzahlen" in einer Reihe von zunehmenden Zahlen geordnet werden. Der " Fehler " kann mit demcomm
Schalter von ` unterdrückt werden--nocheck-order
Bytereihenfolge : Es gibt KEINE Verwendung des
-n switch
withsort
.LC_COLLATE
bestimmt die Reihenfolge, die sogar davon abhängen kann, wie dielocale
auf dem Host eingestellt ist, auf dem der Befehl ausgeführt wird. Dies ist die Eingabe, diecomm
standardmäßig erwartet wird. Ein bisschen mehr darüberLC_COLLATE
finden Sie hier: Referenz1 und Referenz2Ist der Fehler ein Problem? Das hängt davon ab, was Sie erreichen wollen. Wie Sie unten Beispiele in denen sehen werden,
comm
gibt die gleichen Ergebnissenachdemdie Dateienvergleichen mit oder ohnesort
`s-n
Schalter, wenn auch ihre Reihenfolge in der obigen Art und Weise variiert je nachdemob die-n switch
mit dem verwendet wirdsort
Befehl. Ich selbst bevorzuge "lexografisch" geordnete Ergebniszahlen, die in einer Reihe zunehmen.Wenn Sie die Ergebnisse jedoch nicht in " lexografischer " Reihenfolge anzeigen möchten , verwenden Sie den Schalter NICHT
-n
, wenn Sie die zumcomm
Vergleich gelieferten Daten sortieren .TESTEN:
Wir werden die Ergebnisse des
comm
Befehls mit und ohne-n
Schalter vergleichen. Ich habe die Komplexität meines Probentestdatensatzes gemäß Kusalanandas Anfrage erhöht:Testdaten :
file1.txt :
file2.txt :
Schnittpunkt :
Listen Sie nur Nummern auf, die BEIDEN Dateien gemeinsam sind
Ohne
-n
Schalter:Ergebnisse : Richtig, aber in einer nicht sortierten Reihenfolge zurückgegeben
MIT
-n
Schalter:Ergebnisse : Richtig, aber in einer LEXOGRAPHISCH sortierten Reihenfolge zurückgegeben. Der Vorgang wurde erfolgreich abgeschlossen und lieferte die gleichen Ergebnisse wie
comm
ohne-n
Schalter, jedoch in einer sortierten Liste.Unterschied :
Listen Sie nur Zahlen auf, die für jede Datei eindeutig sind:
Ohne
-n
Schalter:Ergebnisse : Richtig - diese Nummern sind in der Tat exklusiv für die jeweilige Datei.
MIT
-n
Schalter:Ergebnisse : Korrigieren Sie dieselben Ergebnisse wie
comm
ohne den-n
Schalter, geben Sie jedoch den Fehler bezüglich der Reihenfolge der positiven Ganzzahlen zurück, die nicht in den Dateien selbst sortiert sind.LÖSUNG für LEXOGRAFISCHE ERGEBNISSE:
Verwenden
comm
`s--nocheck-order
Schalter , um die Fehlermeldung zu unterdrücken. Da wir wissen, dass die Zahlen nicht in jeder Datei sortiert sind, aber die von zurückgegebenen Ergebnissecomm -n
korrekt sind, kann der Fehler sicher ignoriert werden, indem er unterdrückt wird:Schnittpunkt :
Unterschied :
FAZIT:
Der Fehler " Datei ist nicht in sortierter Reihenfolge " bei der Rückgabe Sortieren positiver Ganzzahlen
comm
bedeutet nicht, dass die mit dem-n
Schalter mit zurückgegebenen Ergebnissecomm
falsch sind. In der Tat gibt die Verwendungcomm -n
eine ordentliche Korrektur in einer sortierten Reihenfolge!Vielen Dank an @dhag, @kusalananda @ChrisDown, für die Probleme, die weiter ausgebaut werden mussten. Ich freue mich immer über die Überprüfung meiner Arbeit: Der einzige Weg, wie wir besser werden können, besteht darin, dass wir ständig von unseren Kollegen gedrängt und herausgefordert werden.
quelle