Ошибка в сортировке или недопонимание

Ошибка в сортировке или недопонимание

Предположим, у меня есть этот файл.

b 10 foo
a 10 bar
a 2 bar

Я хочу сортировать по третьему столбцу, в алфавитном порядке. В случае совпадений я хочу сортировать по второму столбцу, в числовом порядке. На странице руководства для программы сортировки unix вы найдете следующее:

> sort -k3 -k2n a

Который дает

a 2 bar
a 10 bar
b 10 foo

Что правильно.

Теперь, что я на самом деле хочу, это сортировать по первому столбцу, в алфавитном порядке, и в случае совпадений, по второму столбцу, в числовом порядке. Может кто-нибудь объяснить мне, почему

> sort -k1 -k2n a

Дает

a 10 bar
a 2 bar
b 10 foo

Что из этого явно неверно?

решение1

Причина, по которой ваш пример не работает так, как вы ожидаете, заключается в том, что он sortучитывает все позиции.послеуказанный также. В вашем примере словарь как бы -k1сортирует строку a 10 barдо a 2 bar, и вам не нужен тай-брейк.

Вам необходимо явно указать ограничения ключа сортировки, как описано на странице руководства:

   -k, --key=POS1[,POS2]
          start a key at POS1, end it at POS2 (origin 1)

Пример:

$ sort -k1,1 -k2n theFile
a 2 bar
a 10 bar
b 10 foo

Связанный контент