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 dem sort
Befehl zum Sortieren der gelieferten Ergebnisse comm
kann die Reihenfolge der zurückgegebenen Ergebnisse comm
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 dem comm
Schalter von ` unterdrückt werden--nocheck-order
Bytereihenfolge : Es gibt KEINE Verwendung des -n switch
with sort
. LC_COLLATE
bestimmt die Reihenfolge, die sogar davon abhängen kann, wie die locale
auf dem Host eingestellt ist, auf dem der Befehl ausgeführt wird. Dies ist die Eingabe, die comm
standardmäßig erwartet wird. Ein bisschen mehr darüber LC_COLLATE
finden 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,comm
gibt die gleichen Ergebnissenachdemdie Dateienvergleichen mit oder ohne sort
`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 zum comm
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 :
40
110000
2200
6
33000
file2.txt :
2200
40
33000
6
440000
Schnittpunkt :
Listen Sie nur Nummern auf, die BEIDEN Dateien gemeinsam sind
Ohne -n
Schalter:
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 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:
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 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 Ergebnisse comm -n
korrekt 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 comm
bedeutet nicht, dass die mit dem -n
Schalter mit zurückgegebenen Ergebnisse comm
falsch sind. In der Tat gibt die Verwendung comm -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.