Линукс:Сортировка GNU не сортирует последовательность

StackOverflow https://stackoverflow.com/questions/1528866

  •  20-09-2019
  •  | 
  •  

Вопрос

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

$ 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-последовательности или свернуть все в одну строку).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top