Eu sempre assumi que, sort
sem nenhum argumento adicional, classificaria um arquivo em ordem lexical. No entanto, hoje eu me deparei com o seguinte caso de teste:
sort test2.txt
a/a
a/c
a//c
a/d
Como você pode ver, a terceira linha tem duas barras, então a segunda barra está em um lugar onde as linhas vizinhas têm letras 'c' e 'd' respectivamente. Eu duvido que '/' fique entre 'c' e 'd' em qualquer página de código, então eu acho que o algoritmo de comparação padrão não é estritamente léxico.
Existe algum pré-processamento (como remover não-letras?) Ou casos especiais (como "uma sequência de um ou mais símbolos é igual a qualquer outra sequência de símbolos"?) Para comparar símbolos?
Eu li a man
página, sort
mas não encontrei nenhuma iluminação lá.
eu uso
sort --version
sort (GNU coreutils) 8.5
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel and Paul Eggert.
e eu realmente preciso classificar milhões de URLs para uma análise mais aprofundada, que pressupõe ordenação lexical - há alguma opção que eu poderia passar sort
para conseguir isso?
fonte
Respostas:
É sua localidade, prefixar seu comando sort com uma configuração de localidade que especifica a ordem de agrupamento desejada
man sort
dizGNU diz
NOTA
Se seus milhões de URLs contiverem caracteres não-ASCII (o que os tornaria realmente IRIs ), você poderá obter resultados indesejados usando uma classificação de valor de byte. Você pode usar a codificação de URL para evitar esse problema, com o risco de tornar os URLs difíceis para os humanos lerem.
fonte