AKTUALISIERTE ANTWORT:
PROBLEM:
Das OP erhält eine Fehlermeldung bezüglich " Datei ist nicht in sortierter Reihenfolge ", wenn positive Ganzzahlen in den Dateien commverglichen werden, nicht Text. Wir haben es also mit Nicht-Dezimalzahlen zu tun.
Kurze Antwort:
Abhängig von der Verwendung des -nSchalters mit dem sortBefehl zum Sortieren der gelieferten Ergebnisse commkann die Reihenfolge der zurückgegebenen Ergebnisse commsehr unterschiedlich sein:
Lexografisch : Die Verwendung des -nSchalters mit Sortierung führt dazu, dass die "positiven Ganzzahlen" in einer Reihe von zunehmenden Zahlen geordnet werden. Der " Fehler " kann mit dem commSchalter von ` unterdrückt werden--nocheck-order
Bytereihenfolge : Es gibt KEINE Verwendung des -n switchwith sort. LC_COLLATEbestimmt die Reihenfolge, die sogar davon abhängen kann, wie die localeauf dem Host eingestellt ist, auf dem der Befehl ausgeführt wird. Dies ist die Eingabe, die commstandardmäßig erwartet wird. Ein bisschen mehr darüber LC_COLLATEfinden Sie hier: Referenz1 und Referenz2
Ist der Fehler ein Problem?
Das hängt davon ab, was Sie erreichen wollen. Wie Sie unten Beispiele in denen sehen werden,commgibt die gleichen Ergebnissenachdemdie Dateienvergleichen mit oder ohne sort `s-nSchalter, wenn auch ihre Reihenfolge in der obigen Art und Weise variiert je nachdemob die-n switchmit dem verwendet wirdsortBefehl. 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 zum commVergleich gelieferten Daten sortieren .
TESTEN:
Wir werden die Ergebnisse des commBefehls mit und ohne -nSchalter vergleichen. Ich habe die Komplexität meines Probentestdatensatzes gemäß Kusalanandas Anfrage erhöht:
Testdaten :
file1.txt :
40
110000
2200
6
33000
file2.txt :
2200
40
33000
6
440000
Schnittpunkt :
Listen Sie nur Nummern auf, die BEIDEN Dateien gemeinsam sind
Ohne -nSchalter:
comm -12 <(sort file1.txt) <(sort file2.txt)
2200
33000
40
6
Ergebnisse : Richtig, aber in einer nicht sortierten Reihenfolge zurückgegeben
MIT -n Schalter:
comm -12 <(sort -n file1.txt) <(sort -n file2.txt)
6
40
2200
33000
comm: file 1 is not in sorted order
Ergebnisse : Richtig, aber in einer LEXOGRAPHISCH sortierten Reihenfolge zurückgegeben. Der Vorgang wurde erfolgreich abgeschlossen und lieferte die gleichen Ergebnisse wie commohne -nSchalter, jedoch in einer sortierten Liste.
Unterschied :
Listen Sie nur Zahlen auf, die für jede Datei eindeutig sind:
Ohne -nSchalter:
comm -3 <(sort file1.txt) <(sort file2.txt)
110000
440000
Ergebnisse : Richtig - diese Nummern sind in der Tat exklusiv für die jeweilige Datei.
MIT -n Schalter:
comm -3 <(sort -n file1.txt) <(sort -n file2.txt)
110000
comm: file 1 is not in sorted order
440000
Ergebnisse : Korrigieren Sie dieselben Ergebnisse wie commohne den -nSchalter, 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-orderSchalter , um die Fehlermeldung zu unterdrücken. Da wir wissen, dass die Zahlen nicht in jeder Datei sortiert sind, aber die von zurückgegebenen Ergebnisse comm -nkorrekt sind, kann der Fehler sicher ignoriert werden, indem er unterdrückt wird:
Schnittpunkt :
comm -12 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)
6
40
2200
33000
Unterschied :
comm -3 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)
110000
440000
FAZIT:
Der Fehler " Datei ist nicht in sortierter Reihenfolge " bei der Rückgabe Sortieren positiver Ganzzahlen commbedeutet nicht, dass die mit dem -nSchalter mit zurückgegebenen Ergebnisse commfalsch sind. In der Tat gibt die Verwendung comm -neine 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.