Предположим, у меня есть этот файл.
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