Comando Sort como usar? [RESOLVIDO]

1. Comando Sort como usar? [RESOLVIDO]

Mr.Perfection
perfection

(usa Slackware)

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!


  


2. MELHOR RESPOSTA

Sandro Marcell
SMarcell

(usa Slackware)

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

Tente:

LC_COLLATE=POSIX sort -V --ignore-case  


3. Re: Comando Sort como usar?

Rogerio
RogerDez

(usa Outra)

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?

Mr.Perfection
perfection

(usa Slackware)

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]

Rogerio
RogerDez

(usa Outra)

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]

Mr.Perfection
perfection

(usa Slackware)

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?

Mr.Perfection
perfection

(usa Slackware)

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]

Rogerio
RogerDez

(usa Outra)

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]

Mr.Perfection
perfection

(usa Slackware)

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]

Mr.Perfection
perfection

(usa Slackware)

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]

Rogerio
RogerDez

(usa Outra)

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]

Mr.Perfection
perfection

(usa Slackware)

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



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts