O motivo pelo qual seu exemplo não funciona como esperado é que sort
considere todas as posições após a especificada também. No seu exemplo, o tipo de dicionário -k1
classifica a string a 10 bar
antes de a 2 bar
e você não precisa de um desempate.
Você precisa especificar explicitamente os limites da chave de classificação, conforme descrito na man page:
-k, --key=POS1[,POS2]
start a key at POS1, end it at POS2 (origin 1)
Exemplo:
$ sort -k1,1 -k2n theFile
a 2 bar
a 10 bar
b 10 foo