Além da localidade não-C, o que mais está atrapalhando o meu tipo?

4

Estou usando o Ubuntu 16.04_xfce xenial. Isso é mais do que configurar o local correto , ou usar operandos de ordenação "ordem natural".

Eu classifiquei o arquivo de fontes do apt. Todas as linhas começam com "#", "##" ou "deb". Eu esperava ver todas as linhas em branco, todas as linhas com "#", em seguida, com "##", finalmente aqueles começando "deb". Veja cerca de 9 linhas abaixo e 25 linhas abaixo na minha saída:

root@HEJ ~ $ sort /etc/apt/sources.list







## Also, please note that software in backports WILL NOT receive any review
# deb cdrom:[Xubuntu 16.04.1 LTS _Xenial Xerus_ - Release i386 (20160719)]/ xenial main multiverse restricted univer
# deb http://archive.canonical.com/ubuntu xenial partner
deb http://archive.canonical.com/ubuntu/ xenial partner
deb http://mirror.csclub.uwaterloo.ca/debian-multimedia/ stable main
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial main restricted
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial multiverse
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-security main restricted
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-security multiverse
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-security universe
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial universe
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-updates main restricted
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-updates multiverse
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-updates universe
deb http://mirror.cs.pitt.edu/ubuntu/archive xenial-backports main restricted universe multiverse
deb http://mirror.cs.pitt.edu/ubuntu/archive xenial main restricted universe multiverse
deb http://mirror.cs.pitt.edu/ubuntu/archive xenial-updates main restricted universe multiverse
deb http://ppa.launchpad.net/cdemu/ppa/ubuntu xenial main
# deb http://reflection.oss.ou.edu/linuxmint/repos serena main upstream import backport
deb http://security.ubuntu.com/ubuntu/ xenial-security restricted universe multiverse main
deb http://www.4pane.co.uk/ubuntu/ xenial main
# deb-src http://archive.canonical.com/ubuntu xenial partner
# deb-src http://archive.canonical.com/ubuntu/ xenial partner
# deb-src http://mirror.csclub.uwaterloo.ca/debian-multimedia/ stable main
# deb-src http://mirror.csclub.uwaterloo.ca/debian-multimedia/ stable main
# deb-src http://mirror.cs.pitt.edu/ubuntu/archive xenial-backports main restricted universe multiverse
# deb-src http://mirror.cs.pitt.edu/ubuntu/archive xenial main restricted universe multiverse
# deb-src http://mirror.cs.pitt.edu/ubuntu/archive xenial-updates main restricted universe multiverse
# deb-src http://ppa.launchpad.net/cdemu/ppa/ubuntu xenial main
# deb-src http://reflection.oss.ou.edu/linuxmint/repos serena main upstream import backport
# deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted
# deb-src http://security.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse
# deb-src http://security.ubuntu.com/ubuntu xenial-security universe
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial universe
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial-updates universe
# deb-src http://www.4pane.co.uk/ubuntu/ xenial main
# deb-src http://www.4pane.co.uk/ubuntu/ xenial main
# deb-src http://www.scootersoftware.com/ bcompare4 non-free
## distribution.
## extensively as that contained in the main release, although it includes
## Major bug fix updates produced after the final release of the
## multiverse WILL NOT receive any review or updates from the Ubuntu
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu 
## N.B. software from this repository may not have been tested as
## newer versions of some applications which may provide useful features.
# newer versions of the distribution.
## or updates from the Ubuntu security team.
## 'partner' repository.
## respective vendors as a service to Ubuntu users.
## security team.
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
## team.
## team, and may not be under a free licence. Please satisfy yourself as to
## team, and may not be under a free licence. Please satisfy yourself as to 
## This software is not part of Ubuntu, but is offered by Canonical and the
## Uncomment the following two lines to add software from Canonical's
## universe WILL NOT receive any review or updates from the Ubuntu security
## your rights to use the software. Also, please note that software in
## your rights to use the software. Also, please note that software in 

As configurações de localidade em vigor:

root@HEJ ~ $ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Pesquisas mostram que preciso sobrecarregar LC_COLLATE="en_US.UTF-8" a LC_COLLATE="C.UTF-8" (ou melhor ainda LC_ALL=C ) para obter resultados racionais. Mas há mais uma questão aqui ...

Se esta fosse apenas uma questão de ordenação de caracteres, então todos os "#" deveriam ordenar juntos, e todos os "##" ordenariam juntos.

Mas o que parece estar acontecendo é que o "#" e "##" são removidos das chaves de classificação , e não posso acreditar que isso seja uma função da ordem de agrupamento.

O que mais está mexendo com minhas chaves de classificação?

E enquanto estamos no assunto da ordem de intercalação, Onde a ordem binária dos caracteres em locais específicos é documentada? , ou seja, uma lista legível de cada caractere possível organizada em ordem agrupada?

(Varíola para aqueles que não fizeram a definição de código de idioma en_US para cima)!

    
por HiTechHiTouch 20.02.2017 / 06:40

2 respostas

4

Esse comportamento é puramente uma função da ordenação de agrupamento controlada por seu LC_COLLATE locale. Como você tem um conjunto de códigos de idioma Unicode, o glibc usa a ordem de intercalação Unicode especificada em uma de suas variantes definidas, que tenta ser um tipo "natural".

Esta ordenação é o Algoritmo de Ordenação Unicode UTS 10 , com ajuste de deslocamento de elementos de agrupamento variáveis e usando (provavelmente) o elemento de agrupamento padrão tabela . De fato, caracteres como # , mas também a maioria das outras pontuações e espaços em branco, são tratados como menos significativos que as diferenças entre os caracteres alfanuméricos seguintes e usados apenas para quebrar vínculos. Todo o algoritmo é definido com algum detalhe no padrão e fica ainda mais complexo.

às vezes aconselhado não para definir LANG ou LC_COLLATE por esse motivo . Você pode, em vez disso, definir LC_CTYPE (para UTF-8) e LC_MESSAGES (para o idioma de mensagem preferido) e manter o agrupamento no padrão POSIX. Existem efeitos de fluxo de qualquer forma para essa escolha.

No seu sistema, isso provavelmente está definido em /usr/share/i18n/locales/iso14651_t1_common , que é incluído por iso14651_t1 , que é incluído por en_US . As ordenações de outros locais são definidas nos arquivos próximos, geralmente com base no mesmo padrão com alterações localizadas (por exemplo, sv_SE usa a mesma base, mas reordena ...zåäöø , recolhe v e w , etc). Esta tabela, selecionada por LC_COLLATE , é o que realmente determina o comportamento em seu sistema e é derivada de (uma versão passada) do padrão Unicode. Em sistemas mais novos ou mais antigos, usando diferentes versões Unicode, as mesmas strings podem ser comparadas de maneira diferente.

Outras codificações terão suas próprias tabelas separadas que podem ser totalmente não relacionadas.

Você pode verificar o comportamento do seu sistema em relação à especificação, classificando um arquivo contendo strings das tabelas de comparação fornecidas no UTR:

demark
de‐Luge
death
deluge
☠sad
de-luge
de Luge
☠happy
de‐luge
♡sad
deLuge
de luge
♡happy
de-Luge

(há hífens e hífen-minuses nessas palavras)

A ordem que você deve receber é:

death
deluge
de luge
de-luge
de‐luge
deLuge
de Luge
de-Luge
de‐Luge
demark
☠happy
♡happy
☠sad
♡sad

(Alguns) explicação expositiva é dada para esse resultado no relatório:

  • Shifted. The hyphen-minus and hyphen are grouped together, and their
    differences are less significant than the casing differences in the
    letter "l". This grouping results from the fact that they are
    ignorable, but their fourth level differences are according to the
    original primary order, which is more intuitive than Unicode order.
    The symbols ☠ and ♡ are ignored on levels 1-3.

  • Shift-Trimmed. Note how “deLuge” comes between the cased versions with spaces and hyphens. The symbols ☠ and ♡ are ignored on levels 1-3.

É um pouco denso. "Níveis 1-3" são diferentes níveis de peso de desempate no algoritmo, sendo o nível primário 1 o diferenciador mais importante. Esta é provavelmente mais informação do que você precisa, mas você pode pelo menos determinar que é a ordem de agrupamento especificada que cria o resultado que você está vendo.

    
por 20.02.2017 / 23:26
0

Acho que seu comando sort pode ser substituído por um alias ou uma função shell.

A opção de classificação -d mostra:

-d, --dictionary-order
     consider only blanks and alphanumeric characters

Portanto, se essa opção for usada, o # será ignorado e o resultado, mesmo com LC_ALL=C , será idêntico à sua versão inicial.

    
por 20.02.2017 / 18:00

Tags