Я настоятельно рекомендую эту тему переполнения стека на ту же тему. Такое поведение сортировки не является интуитивно понятным, и, несмотря на изучение как этого потока, так и официальной документации сортировки GNU, я не могу точно определить, что происходит, когда индекс сортировки выходит за пределы.
Тем не менее, я должен указать, что вы можете использовать модификатор "b" в качестве опции выбора ключа сортировки, которая игнорирует пробелы в этом ключе, т.е. пустые ключи, например
$ sort -k 2.3nb test
Также из документации сортировки GNU ясно, что опция -k принимает аргумент формата start pos, end pos и, если не указан end pos, она сравнивает ключи от вашей начальной позиции до конца текущей строки. Это, вместе со следующей осторожностью, приводит к неопределенному поведению.
Finally, as a last resort when all keys compare equal,
sort compares entire lines as if no ordering options other
than --reverse (-r) were specified.
Вы также можете указать несколько ключей, которые будут действовать в качестве тай-брейка, хотя это не решает проблему для вашего случая использования, поскольку это первый ключ, который вызывает неинтуитивное поведение.
Наконец, если у вас есть опция --debug, доступная в вашей системе в соответствии с сортировкой GNU, это очень поможет при поиске и устранении неисправностей, поскольку она показывает, что соответствует шаблону ключа. К сожалению, я этого не сделал, и поэтому пришлось экспериментировать в темноте.
Я не знаю, какой именно у вас сценарий использования, но я нашел довольно приятный набор результатов со следующим. Это поведение, вероятно, не задокументировано, но, по-видимому, очевидно, работает в соответствии с моей интуицией и вашим запросом:
$ sort -k 2.3nb,2 test
11 2
11 2 25
11 22
12 22 33
33
33 2 1
33 22 33
222 331
111 222
111 223