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
War es hilfreich?

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top