Você não está classificando somente pelo terceiro campo. Se você não especificar os campos inicial e final, a classificação será feita usando o campo Início do início até o final da linha. De man sort
:
KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where
F is a field number and C a character position in the field; both are
origin 1, and the stop position defaults to the line's end.
Portanto, o :...
também está incluído no tipo.
Use -k3,3
se precisar classificar apenas no terceiro campo:
% sort -t: -k3,3 foo | grep '^n'
ntp:x:38:38::/etc/ntp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash
Com a classificação GNU, você pode verificar o que está acontecendo com --debug
:
$ sort -t: -k3,3 foo --debug | tail
sort: using ‘en_GB.UTF-8’ sorting rules
______________________________________________
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
__
_________________________________________________
nobody:x:99:99:Nobody:/:/sbin/nologin
__
_____________________________________
nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash
___
_______________________________________________________
$ sort -t: -k3 foo --debug | tail
sort: using ‘en_GB.UTF-8’ sorting rules
______________________________________________
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
_______________________________________
_________________________________________________
nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash
_____________________________________________
_______________________________________________________
nobody:x:99:99:Nobody:/:/sbin/nologin
____________________________
_____________________________________
Os traços imediatamente abaixo de cada linha mostram a seção comparada.