Classificar arquivo .csv alfabeticamente não funciona corretamente quando há um hífen [duplicado]

0

Eu quero classificar um arquivo .csv que contenha nomes diferentes. Mas há um problema quando um nome tem um hífen no começo.

Eu tentei coisas como:

sort -k1 -t
sort -k1 -g -t
sort -k1 -n -t

entrada:

other data 
Acid 
other data
Acid
-acid
Acid
-acid
Acid
etc.

saída:

random data
Acid
-acid
-acid
Acid
-acid
etc.

deseja:

-acid
-acid
-acid
Acid
Acid 
etc.
    
por dhp12 12.08.2018 / 20:14

1 resposta

0

Antecedentes

Não está claro qual versão de sort você está usando, mas em um sistema CentOS 7.x usando essa versão de classificação:

$ sort --version
sort (GNU coreutils) 8.22

E este arquivo de entrada de amostra:

$ cat file
other data
Acid
other data
Acid
-acid
Acid
-acid
Acid

Isso parece combinar com o que você está procurando em sua saída:

$ sort -k1 file
-acid
-acid
Acid
Acid
Acid
Acid
other data
other data

Idioma e amp; localidade

Acima, minha localidade é definida da seguinte maneira:

$ 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="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=

Você pode obter uma lista completa com este comando:

$ locale -a
aa_DJ
aa_DJ.iso88591
aa_DJ.utf8
aa_ER
aa_ER@saaho
...

Se você tiver algum problema com sua localidade, poderá informar sort para usar o C locale para solucionar esses problemas:

$ LC_ALL=C sort -k1 file
-acid
-acid
Acid
Acid
Acid
Acid
other data
other data

Se você tem uma localidade como de_DE , a classificação seria diferente:

$ LC_COLLATE=de_DE sort -k1 file
Acid
Acid
Acid
Acid
-acid
-acid
other data
other data

Novamente, para controlar isso, você pode colocar o código do idioma em C .

Referências

por 12.08.2018 / 21:31