Como definir sort (1) para usar um agrupamento personalizado?

3

Eu tenho um arquivo de texto contendo um registro por linha que eu gostaria de ordenar alfabeticamente, exceto que eu quero '-' para classificar depois de '[' e ']'. (A ordem de classificação natural tem '-' antes dos colchetes.) Existe uma maneira de modificar o agrupamento que o sort (1) usa para conseguir isso?

    
por uckelman 30.12.2010 / 17:54

3 respostas

1

Uma maneira seria substituir um caractere que não aparece em seus dados, mas classifica após os colchetes (em algum local).

sed 's/-/|/g' inputfile | LC_ALL=C sort | sed 's/|/-/g' > outputfile

Esta obviamente não é uma solução ideal.

    
por 30.12.2010 / 20:22
4

Você provavelmente desejará aplicar uma das soluções alternativas sugeridas, mas a resposta à sua pergunta não é fácil (t). Se você quiser alterar o sort , e nenhuma das ordens de classificação especiais oferecidas pelas opções de linha de comando combina com você, será necessário definir sua própria localidade. Veja localedef .

    
por 30.12.2010 / 20:34
3

Você poderia fazer isso com perl:

perl -e 'print sort { (($a =~ /^-/ && $b =~ /^[\[\]]/) || ($a =~ /^[\[\]]/ && $b =~ /^-/)) ? ($b cmp $a) : ($a cmp $b) } (<>)' <filename>
    
por 30.12.2010 / 19:31

Tags