Shell Unix: ordenação de vários níveis em direções opostas

0

Eu tenho um diretório cheio de arquivos de texto simples que possuem tags na primeira linha, e eu quero obter uma lista das tags e sua frequência. Eu extraí as tags e as classifiquei em uma lista grande; digamos que seja assim:

apple
banana
banana
banana
banana
orange
orange
kumquat
pomegranate
pineapple
pineapple
pineapple

Eu, então, canalizo através de uniq -c para transformá-lo em uma lista com contagens:

      1 apple
      4 banana
      2 orange
      1 kumquat
      1 pomegranate
      3 pineapple

Agora gostaria de classificá-lo, primeiro por número na ordem inversa (os maiores números primeiro) e, em seguida, em encaminhar ordem alfabética. Eu tento fazer isso percorrendo sort -bnr (ignorar espaço em branco inicial, classificação numérica, em ordem reversa), mas o -r também se aplica à parte da letra:

      4 banana
      3 pineapple
      2 orange
      1 pomegranate
      1 kumquat
      1 apple

Pensei na opção -k para classificar por vários campos, sobre os quais acabei de saber, mas parece que a reversão não pode ser aplicada separadamente para diferentes opções de -k (talvez apenas coloque a opção saída através de tac ou algo assim?). Pipá-lo através de um segundo sort não funciona porque ignora a classificação anterior e mistura novamente a parte numérica.

Idealmente, a solução ainda usaria sort e uniq , mas estou aberto a mudar para uma ferramenta diferente, se necessário. Isso pode acabar em um script, portanto, uma solução que exija ferramentas interativas está fora.

    
por Soren Bjornstad 10.01.2016 / 23:20

1 resposta

0

Opa, já encontrei uma resposta porque comecei a navegar aleatoriamente por itens na barra lateral "relacionada"! Acontece que você pode usar parâmetros depois de especificadores de campo para aplicá-los apenas a esse campo - eu li essa parte da man page, mas evidentemente não li com muito cuidado, porque eu perdi:

OPTS is one or more single-letter ordering options [bdfgiMhnRrV], which override global ordering options for that key. If no key is given, use the entire line as the key.

Comando final:

sort -bk 1rn -k 2
    
por 10.01.2016 / 23:31

Tags