Eu acho que o problema é que você não entende o que o sort
está fazendo. A classificação básica é baseada em valores de caracteres ASCII, onde os números são antes de maiúsculas, que são antes de minúsculas: '1' == 49, 'A' == 65, 'a' = 97. Isso explica a coluna sort
, em que números como '23' é classificado antes de '8' que é antes de 'b b': o valor ASCII para '2' é 50, o valor ASCII para '8' é 56 e para 'b' é 98.
Ao classificar numericamente ( sort -n
), as entradas não numéricas são classificadas pelo método regular, mas interpretadas como zero quando comparadas aos números, como 23 ou 8; mas como o valor é tratado como um número, não como um valor de caractere, '8' é anterior a '23'. Assim, as entradas alfabéticas serão classificadas antes das entradas numéricas.
Sua melhor aposta é normalizar os dados para que cada coluna tenha o mesmo tipo de valor: todos os números ou todos os alfanuméricos, e classifique apropriadamente.
Na última coluna (classificação por campo), ele classificará as entradas com mais campos primeiro, desde que você esteja explicitamente especificando 4 (ou mais) campos. Então (1,2,3) seria antes (1,2). Sem a opção -k
, o sort considera a linha como um todo.
Você pode ler mais informações na página info coreutils sort .