Linux: GNU ist Sortierung nicht seq
Frage
Titel bringt es auf.
$ echo `seq 0 10` `seq 5 15` | sort -n
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15
Warum funktioniert das nicht?
Auch wenn ich seq
nicht verwenden:
echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' | sort -n
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15
Und selbst Notwasserung echo
direkt:
$ echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' > numbers
$ sort -n numbers
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15
Lösung
sort(1)
Sorten Linien . Sie müssen analysieren Leerzeichen getrennte Daten selbst:
echo `seq 0 10` `seq 5 15` | tr " " "\n" | sort -n
Andere Tipps
Weil Sie Zeilenumbrüche für sort
müssen:
$ echo `seq 0 10` `seq 5 15` | tr " " "\\n" | sort -n | tr "\\n" " "; echo ""
0 1 2 3 4 5 5 6 6 7 7 8 8 9 9 10 10 11 12 13 14 15
$
Sie haben einzelne Eingabezeile. Es gibt nichts zu sortieren.
Der Befehl wie Sie eingegeben hat es in der Folge von Zahlen ergibt alles in einer Zeile zu sort
weitergegeben werden. Das ist nicht das, was Sie wollen. Übergeben Sie einfach die Ausgabe von seq
direkt an sort
:
(seq 0 10; seq 5 15) | sort -n
By the way, wie Sie gerade herausgefunden, das Konstrukt
echo `command`
nicht in der Regel zu tun, was Sie erwarten und ist überflüssig, was man eigentlich erwarten: Es erzählt die Shell die Ausgabe von command
zu erfassen und zu echo
geben, die wiederum als Ausgabe erzeugt. Lassen Sie einfach die Ausgabe des Befehls direkt durchlaufen (es sei denn, Sie wirklich Mittelwert durch echo
zu erweitern, vielleicht Escape-Sequenzen verarbeitet zu haben, oder alles auf eine Linie zusammenfallen).