2016-07-06 14 views
2

sort, похоже, не соответствует моей ключевой спецификации. Зачем?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] [КЛЮЧ] [, F [.C] [OPTS]] для запуска и остановки положение, где Р представляет собой числовое поле и С позиции символов в поле; оба являются источником 1, а позиция останова по умолчанию соответствует концу линии.

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

BTW, мое окружение Cygwin, работает Z-оболочка.

ответ

3

Два поля в -k arg - это поля START AND END. Вы можете указать -k ЛЮБОЕ ЧИСЛО ВРЕМЕНИ, сортировать по нескольким клавишам. Итак, -k 1,1 -k 2,2 -k 3,3 сортирует сначала поле 1, затем поле 2, затем поле 3.

+0

Большое спасибо, наконец-то получилось! – user1934428

1

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

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

и не

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^