Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Sort é ou não caseSensitive?

Bom dia, Pinguins!

Estudando Linux pra concurso vi uma questão que me deixou intrigado:

Considere que no Linux temos dois arquivos de texto: 'arq1' e 'arq2'. As palavras que constam em 'arq1' são (uma por linha): 'Bola', 'Pato', 'Ave' e 'Cola'. As palavras que constam em 'arq2' são (uma por linha): 'losango', 'asa', 'bode' e 'peixe'. Considere que foi executado o comando: 'cat arq1 arq2 | sort | head –n 6 | tail –n 1 > arq3'. O conteúdo de 'arq3' é:

Eu já adianto que errei pois achei que a resposta seria losango, mas pra minha surpresa o SORT tem um comportamento um tanto esquisito, (segundo alguns comentários na questão):

Gente, é o seguinte, utilizando o pensamento do pessoal só faltou um detalhe: a ordem é a seguinte letras maiúsculas [A-Z] e depois letras minúsculas [a-z], ou seja, independente da palavra começar com 'a' e a outra com 'B' quem virá primeiro na ordem é a palavra que começa com letra maiúscula.

Porém, entretanto, todavia eu ao testar na minha máquina o sort ignorou as maiúsculas e minúsculas.

rafael@rafael-ubuntu:~/exSort$ cat arq1 arq2 | sort
asa
Ave
bode
Bola
Cola
losango
Pato
peixe

Será que isso muda de acordo com a distro?

2 respostas
solução!

O sort usa o locale para definir a estratégia de ordenação, como pode ser visto nesse aviso do man sort:

*** WARNING *** The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values.

Como o sort é implementado no coreutils do GNU, é bem difícil que uma distribuição o sobrescreva (apesar de que é possível). O que acontece é que distribuições diferentes e até mesmo instalações diferentes da mesma distribuição podem ter configurações de locale diferentes, e isso pode alterar o funcionamento do sort.

Creio que essa pergunta está, no mínimo, mal escrita, dado que não especifica o locale (a não ser que ela tenha dado todos os detalhes da instalação do ambiente unix).

Resumindo, se você rodar export LC_ALL=C

rulojuka@orion:/teste/$ cat arq1 arq2 | sort
asa
Ave
bode
Bola
Cola
losango
Pato
peixe
rulojuka@orion:/teste/$ export LC_ALL=C
rulojuka@orion:/teste/$ cat arq1 arq2 | sort   
Ave
Bola
Cola
Pato
asa
bode
losango
peixe

o sortvai funcionar de outro jeito[1].

[1] - https://www.skorks.com/2010/05/sort-files-like-a-master-with-the-linux-sort-command-bash/

Perfeito, obrigado!