Contagem de linhas preservando o cabeçalho

0

Meu idioma usual para contar o número de ocorrências de uma determinada linha em alguma entrada de texto é

… | sort | uniq -c | sort -n

com o último sort -n usado opcionalmente para classificar linhas por contagem de ocorrências. No entanto, recentemente encontrei uma situação em que as três primeiras linhas dos dados eram um cabeçalho, e incluí-las na classificação e contagem de legibilidade extremamente reduzida.

Qual é a maneira mais elegante de simplesmente recuar as três primeiras linhas da entrada (para considerar o campo de contagem), mas não classificá-las?

    
por MvG 31.07.2017 / 13:46

1 resposta

0

No momento em que escrevo esta pergunta, minha melhor solução é esta:

… | { for i in 1 2 3; do read -r i; printf '        %s\n' "$i"; done;
      sort | uniq -c | sort -n; }

Assim, a saída é canalizada para um grupo que lê três linhas e as imprime recuadas por 8 espaços (que aparece como a quantidade de espaço usada por uniq -c para manter a contagem e separação de espaço) e o restante da entrada para esse grupo é encaminhado para sort e uniq .

Eu acho que eu poderia escrever o acima como um script de shell em algum lugar, talvez com o número de linhas como argumento, então eu não tenho que redigitar isso para cada uso.

    
por 31.07.2017 / 13:46