Por que 'classificar' ignora caracteres especiais, como o asterisco?

22

Eu achei que sort classificaria os prefixos comuns juntos, mas isso nem sempre acontece. Tome esta entrada por exemplo:

AT0S*eightieths
AT0S*eyetooth's
AT*ad
AT*Ad
AT*AD
AT*Eydie
AT*eyed
ATF*adv
ATF*ATV
ATF*edify
ATF*Ediva
ATFKT*advocate
ATFKTNK*advocating
ATFKT*outfought
ATFKTS*advocates
ATHT*whitehead
ATHT*Whitehead
AT*id
AT*I'd
AT*Ito
AT*IUD
ATJ*adage
ATNXNS*attention's
ATNXNS*attenuation's
ATNXNS*autoignition's
AT*oat
AT*OD
AT*outweigh
AT*owed
ATP0K*idiopathic
ATP*adobe
ATT*wighted
ATT*witted
ATT*wooded
AT*UT
AT*Uta
AT*wowed
AT*Wyatt
ATX*atishoo

Após sort , esperaria que todos os AT* terminassem em um bloco, mas quando você executar esses dados por meio de sort , a saída == input. Por que é que? Eu não estou especificando nenhuma opção para ignorar caracteres não-alfabéticos ou qualquer coisa. Apenas sort dict > out .

Minha versão de sort vem de coreutils 8.5-1ubuntu3 .

    
por Aaron Digulla 28.12.2010 / 12:21

4 respostas

14
sort --version-sort filename 

Isso preserva a ordem natural dos números.

    
por 28.12.2010 / 14:44
21

A configuração LC_ALL = C restaurou a ordem de classificação tradicional no meu caso. Pacote: coreutils Versão: 8.5-1ubuntu3

export LC_ALL=C 
    
por 28.12.2010 / 15:04
1

Funciona como esperado para mim (no cygwin).

sort input > output resulta em

AT*AD
AT*Ad
AT*Eydie
AT*I'd
AT*IUD
AT*Ito
AT*OD
AT*UT
AT*Uta
AT*Wyatt
AT*ad
AT*eyed
AT*id
AT*oat
AT*outweigh
AT*owed
AT*wowed
AT0S*eightieths
AT0S*eyetooth's
ATF*ATV
ATF*Ediva
ATF*adv
ATF*edify
ATFKT*advocate
ATFKT*outfought
ATFKTNK*advocating
ATFKTS*advocates
ATHT*Whitehead
ATHT*whitehead
ATJ*adage
ATNXNS*attention's
ATNXNS*attenuation's
ATNXNS*autoignition's
ATP*adobe
ATP0K*idiopathic
ATT*wighted
ATT*witted
ATT*wooded
ATX*atishoo

É um tipo de alias para algo? tente \sort

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

    
por 28.12.2010 / 12:53
0

Com a classificação do GNU, você pode usar --dictionary-order :

NAME
       sort - sort lines of text files

SYNOPSIS
       sort [OPTION]... [FILE]...
       sort [OPTION]... --files0-from=F

DESCRIPTION
       Write sorted concatenation of all FILE(s) to standard output.

       With no FILE, or when FILE is -, read standard input.

       Mandatory arguments to long options are mandatory for short options too.  Ordering options:

       -b, --ignore-leading-blanks
              ignore leading blanks

       -d, --dictionary-order
              consider only blanks and alphanumeric characters
    
por 14.12.2017 / 10:14

Tags