Pular para o conteúdo

Comando Sort como usar? [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar
01 02

1. Comando Sort como usar? [RESOLVIDO]

Enviado em 17/03/2020 - 16:13h

Bom dia a todos! Estou com dificuldade em usar o comando sort se alguém puder ajudar?

Tudo que tentei no comando sort não funcionou EX:
sort
sort -f
sort -fn
sort -n -f
sort -f -n
sort -d
sort -g
sort -V

Eu quero dar sort na seguinte lista:
a
01
B
02
C
03
2
c
A
3
b
1

Quero o resultado da seguinte forma:
01
1
02
2
03
3
A
a
B
b
C
c

OBS 1 Não tem problema maiúsculas estarem primeiro ou depois na ordem, EX: A,a ou a,A
OBS 2 Não tem problema os números estarem primeiro na ordem com as letras ou após as letras. EX: 1,a ou a,1

Tudo o que eu quero é que esteja Ordenado ignorando o CASE e Ordenado numéricamente como mostrei acima.
Não sei onde estou errando!

Responder tópico

2. Re: Comando Sort como usar? [RESOLVIDO]

Melhor resposta

Enviado em 17/03/2020 - 17:50h

Tente:

LC_COLLATE=POSIX sort -V --ignore-case  

3. Re: Comando Sort como usar?

Enviado em 17/03/2020 - 16:44h

caso seja uma lista mesmo, uma variável ou uma lista de um arquivo.
acho que tu podes fazer dois sorts, um para os números e outro para as letras (fica igual ao que tu quer):
cat test | grep '^[[:digit:]]' | sort -n;   cat test | grep -v '^[[:digit:]]' | sort 


Ou veja a opção de ordem do dicionário '-d':
-d, --dictionary-order
consider only blanks and alphanumeric characters

$ cat test | sort -d
01
02
03
1
2
3
a
A
b
B
c
C

4. Re: Comando Sort como usar?

Enviado em 17/03/2020 - 17:01h

RogerDez escreveu:
cat test | grep '^[[:digit:]]' | sort -n;   cat test | grep -v '^[[:digit:]]' | sort 

$ cat test | sort -d
01
02
03
1
2
3
a
A
b
B
c
C

Não é o que preciso.
Seu primeiro exemplo faz o mesmo que sort -d que como informei eu já havia testado!
Repare que ele não deu Sort nos números. A saída numérica deveria ser assim: 01, 1, 02, 2, 03, 3

5. Re: Comando Sort como usar? [RESOLVIDO]

Enviado em 17/03/2020 - 17:52h

Oa minha primeira sugestão nao fica como a saida da segunda sugestão. Teste aí , fica do jeito que tu pediu

6. Re: Comando Sort como usar? [RESOLVIDO]

Enviado em 17/03/2020 - 18:01h

RogerDez escreveu:
Oa minha primeira sugestão nao fica como a saida da segunda sugestão. Teste aí , fica do jeito que tu pediu

cat test | grep '^[[:digit:]]' | sort -n;   cat test | grep -v '^[[:digit:]]' | sort
01
1
02
2
03
3
A
B
C
a
b
c

Eu já havia testado, então estou mostrando o resultado.
Repare que ele coloca maiúsculas em primeiro e conforme eu disse na pergunta não serve
perfect escreveu: Tudo o que eu quero é que esteja Ordenado ignorando o CASE e Ordenado numéricamente como mostrei acima.

7. Re: Comando Sort como usar?

Enviado em 17/03/2020 - 18:07h

SMarcell escreveu: Tente:
LC_COLLATE=POSIX sort -V --ignore-case  

Corrigi colocando o nome do arquivo
LC_COLLATE=POSIX sort -V --ignore-case test 

Vi que também funciona sem o LC_COLLATE
sort -V --ignore-case test 

E também descobri que funciona assim também
sort -Vf test
sort -fV test

Obrigado!

8. Re: Comando Sort como usar? [RESOLVIDO]

Enviado em 17/03/2020 - 18:16h

isso é pq os seus LC (configs de locale) estão com problemas de configuração ou nem estão configurados, por isso a saída da minha primeira sugestão saiu do jeito que tu mandou aí no seu pc. Aqui fica OK, fica exatamente como a saída da sugestão escolhida como melhor resposta.

9. Re: Comando Sort como usar? [RESOLVIDO]

Enviado em 17/03/2020 - 18:26h

RogerDez escreveu: isso é pq os seus LC (configs de locale) estão com problemas de configuração ou nem estão configurados, por isso a saída da minha primeira sugestão saiu do jeito que tu mandou aí no seu pc. Aqui fica OK, fica exatamente como a saída da sugestão escolhida como melhor resposta.

Acredito que não, visto que usei o comando sort sem nenhum parametro para mudar LOCALE

E mesmo usando LOCALE no seu comando não da o sort corretamente!
E ainda analisando o seu comando, vc somente usa -n para Ordenar Numéricamente. Não tem nada para Ordenar as Letras igonorando o case que pudesse fazer seu comando funcionar! Por isso acho que ele está errado!
LC_COLLATE=POSIX cat test | grep '^[[:digit:]]' | sort -n; cat test | grep -v '^[[:digit:]]' | sort


Alguma idéia? Meus LOCALE estão assim eu uso Tudo em Inglês o Linux não tem idioma BR, e uso UTF-8 porque uso muitos símbolos de teclado
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE=C
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=


10. Re: Comando Sort como usar? [RESOLVIDO]

Enviado em 17/03/2020 - 18:32h

RogerDez escreveu: isso é pq os seus LC (configs de locale) estão com problemas de configuração ou nem estão configurados, por isso a saída da minha primeira sugestão saiu do jeito que tu mandou aí no seu pc. Aqui fica OK, fica exatamente como a saída da sugestão escolhida como melhor resposta.

Verifique com atenção se as letras Maiúsculas não estão separadas das minúsculas, pq é disso que digo que não funcionou.
Exemplo Errado:
A
B
C
a
b
c
Exemplo Certo
A
a
B
b
C
c

11. Re: Comando Sort como usar? [RESOLVIDO]

Enviado em 17/03/2020 - 18:44h

E mesmo usando LOCALE no seu comando não da o sort corretamente!
E ainda analisando o seu comando, vc somente usa -n para Ordenar Numéricamente. Não tem nada para Ordenar as Letras igonorando o case que pudesse fazer seu comando funcionar! Por isso acho que ele está errado!
LC_COLLATE=POSIX cat test | grep '^[[:digit:]]' | sort -n; cat test | grep -v '^[[:digit:]]' | sort


UHMM... É que tem DOIS comandos aqui, dois cats, dois greps e dois sorts. Teria que ter dois LC_COLLATE. Além disso, acredito que o LC_COLLATE neste caso deveria ser na frente do sort, e não do cat. Outra forma seria vc 'export LC_COLLATE=POSIX' antes de executar os comandos.. Ou seja, o LC_COLLATE é uma variável de ambiente. Se vc exportar a variável, ela fica configurada na sua shell.

Agora, se vc quer manter seu ambiente e LC_COLLATE originais, vc pode executar um único comando e mudando o LC_COLLATE temporariamente se adicionar essa variável antes do nome do comando. O LC_COLLATE do seu ambiente não é mudado..

É uma alternativa, mas ficou muito simples com 'sort -Vf'.. Apesar de que o 'a' minúsculo vai vir antes do 'A' maiúsculo, se o LC_COLLATE estiver como en_US.UTF8, porém ele fica do jeito que tu quer com POSIX... Interessante..!

De qualquer forma, pq vc deixou o seu locale do LC_COLLATE=C ?
Pode colocar 'en_US.UTF-8' como em todas as outras entradas.. Ou só precisa setar o LC_ALL=en_US.UTF-8 e LANG msm..

Dei negativo para a melhor resposta por que o batman não EXPLICOU NADA

12. Re: Comando Sort como usar? [RESOLVIDO]

Enviado em 17/03/2020 - 19:08h

RogerDez escreveu:
Outra forma seria vc 'export LC_COLLATE=POSIX' antes de executar os comandos.. Ou seja, o LC_COLLATE é uma variável de ambiente. Se vc exportar a variável, ela fica configurada na sua shell.

Deu no mesmo o problema
 $ export LC_COLLATE=POSIX
 $ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE=POSIX
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=

 $ cat test | grep '^[[:digit:]]' | sort -n; cat test | grep -v '^[[:digit:]]' | sort
01
1
1
02
2
03
3
3
A
B
C
a
b
c

É uma alternativa, mas ficou muito simples com 'sort -Vf'.. Apesar de que o 'a' minúsculo vai vir antes do 'A' maiúsculo

Também não. O Maiúsculo sempre está antes do mínusculo, mesmo com LC_COLLATE=POSIX

De qualquer forma, pq vc deixou o seu locale do LC_COLLATE=C ?

Não lembro exatamente agora, mas acho que tinha a ver com Scripts, ou algum teste que fiz com a Linguagem C. Não lembro mesmo o motivo atual, mas tenho anotado em algum lugar do PC

Dei negativo para a melhor resposta por que o batman não EXPLICOU NADA

Agradeço suas explicações, tudo acaba sempre sendo útil


01 02

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder