Линукс:Сортировка GNU не сортирует последовательность
Вопрос
Название подводит итог.
$ 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
Решение
sort(1)
сорта линии.Вам придется самостоятельно анализировать данные, разделенные пробелами:
echo `seq 0 10` `seq 5 15` | tr " " "\n" | sort -n
Другие советы
Потому что вам нужны новые строки для 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
$
У вас есть одна строка ввода.Сортировать нечего.
Введенная вами команда приводит к тому, что вся последовательность чисел передается в sort
в одну строку.Это не то, чего вы хотите.Просто передайте вывод seq
прямо к sort
:
(seq 0 10; seq 5 15) | sort -n
Кстати, как вы только что узнали, конструкция
echo `command`
не делает обычно делайте то, что вы ожидаете, и это избыточно для того, что вы на самом деле ожидаете:Он сообщает оболочке захватить вывод command
и передать его echo
, который снова выдает его в качестве вывода.Просто позвольте выводу команды пройти напрямую (если только вы не Действительно имею в виду, что его обработает echo
, возможно, чтобы расширить escape-последовательности или свернуть все в одну строку).