Сортировка Gnu: случайные символы в спецификации поля

sort, похоже, не нравится моя спецификация ключа. Почему?

~/tmp $ sort --version
sort (GNU coreutils) 8.25
Packaged by Cygwin (8.25-1)
~/tmp $ echo 'a;b;c;d;e;f;g'|sort --field-separator=';' --key=1,5,2                                          
sort: stray character in field spec: invalid field specification '1,5,2'

Со страницы руководства:

-k, --key=KEYDEF : сортировать по ключу; KEYDEF указывает местоположение и тип

KEYDEF — это F[.C][OPTS][,F[.C][OPTS]] для начальной и конечной позиции, где F — номер поля, а C — позиция символа в поле; оба являются исходной точкой 1, а позиция остановки по умолчанию соответствует концу строки.

Поскольку части .C и OPTS в KEYDEF являются необязательными, ключевая спецификация F,F,F (т. е. только номера полей) должна быть правильной. Что я сделал не так?

Кстати, моя среда — Cygwin, на которой работает Z-shell.


person user1934428    schedule 06.07.2016    source источник


Ответы (2)


Два поля в -k arg являются полями START и END. Вы можете указать -k ЛЮБОЕ КОЛИЧЕСТВО РАЗ для сортировки по нескольким ключам. Таким образом, -k 1,1 -k 2,2 -k 3,3 сначала отсортирует по полю 1, затем по полю 2, а затем по полю 3.

person tedtoal    schedule 14.07.2017
comment
Спасибо большое, наконец-то понял! - person user1934428; 17.07.2017
comment
Или, проще говоря, -k1 -k2 -k3 - person dsz; 03.06.2021

Упс, я должен был воспринимать справочную страницу более буквально. Определение для KEYDEF говорит

F[.C][OPTS][,F[.C][OPTS]]

и не

F[.C][OPTS][,F[.C][OPTS]...]

это означает, что можно указать только 1 или 2 поля, а не произвольное число. Это объясняет ошибку.

В качестве примечания, я считаю, что есть все еще ошибка на странице руководства. В определении KEYDEF сказано, что конечная позиция по умолчанию соответствует концу строки. Это не может быть правдой, не так ли? ИМО, это должно быть положение остановки по умолчанию соответствует концу поля.

ОБНОВЛЕНИЕ: Мое объяснение НЕ верно. Смотрите ответ @tedtoal для правильного объяснения.

person user1934428    schedule 06.07.2016