Это вопрос к этому вопросу: что делает 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-й символ первого поля для операции сортировки.