Помогите мне понять, что здесь делает

Это вопрос к этому вопросу: что делает sort -n делать с числовыми значениями?

Вот мой ввод:

1-----*** R----**** 1---***** 

И я бегу:

 sort -k 1.2,1.9n input.txt > output.txt 

Вот мой вывод:

 1-----*** 1---***** R----**** 

И мой ожидаемый результат:

 1---***** R----**** 1-----*** 

Я ожидаю, что этот результат, поскольку значение ASCII * (42) меньше значения – (45). Тем не менее, похоже, что R рассматривается в сортировке, но я думал, что 1.2.1.9 исключит его. Что я делаю не так?

Вы используете недопустимый ключ для сортировки (недействительный, поскольку он не соответствует вашему входному тексту). Справочное руководство по сортировке предлагает использовать опцию --debug для исследования поведения того, что соответствует их ключу. Используя ваш командный ключ, 1.2,1.9n , sort производит следующий вывод:

 % sort -k 1.2,1.9n --debug input.txt sort: using 'en_US.UTF-8' sorting rules 1-----*** ^ no match for key _________ 1---***** ^ no match for key _________ R----**** ^ no match for key _________ 

и, похоже, возвращается к сортировке по умолчанию, используя все поле. Если вы опустите n из своего ключа и просто используете 1.2,1.9 вы получите следующее:

 % sort -k 1.2,1.9 --debug input.txt sort: using 'en_US.UTF-8' sorting rules 1-----*** ________ _________ R----**** ________ _________ 1---***** ________ _________ 

который правильно использует от 2-го по 9-й символ первого поля для операции сортировки.