Linux: GNU sort не сортирует seq - PullRequest
       18

Linux: GNU sort не сортирует seq

1 голос
/ 07 октября 2009

Название подводит итог.

$ 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

Почему это не работает?

Даже если я не использую seq:

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

И даже угробление echo напрямую:

$ 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

Ответы [ 4 ]

10 голосов
/ 07 октября 2009

sort(1) сортирует строки . Вы должны проанализировать данные с пробелами самостоятельно:

echo `seq 0 10` `seq 5 15` | tr " " "\n" | sort -n
9 голосов
/ 07 октября 2009

Потому что вам нужны новые строки для sort:

$ 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
$
5 голосов
/ 07 октября 2009

У вас есть одна строка ввода. Нечего сортировать.

3 голосов
/ 07 октября 2009

Команда, введенная вами, приводит к тому, что последовательность чисел передается sort в одной строке. Это не то, что вы хотите. Просто передайте вывод seq напрямую sort:

(seq 0 10; seq 5 15) | sort -n

Кстати, как вы только что узнали, конструкция

echo `command`

не обычно делает то, что вы ожидаете, и является избыточным для того, что вы на самом деле ожидаете: он говорит оболочке захватить вывод command и передать его echo, что приводит к выходной снова. Просто позвольте выводу команды пройти напрямую (если вы действительно не хотите обработать ее с помощью echo, возможно, чтобы расширить escape-последовательности или свернуть все в одну строку).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...