Se você puder manipular a saída em um formato ligeiramente diferente, faça o seguinte:
cmd1 | tr " " "\n" | uniq -c
Você voltaria:
3 100
2 99
1 26
1 25
2 24
Eu tenho um comando (cmd1) que percorre um arquivo de log para filtrar um conjunto de números. Os números estão em ordem aleatória, então eu uso sort -gr
para obter uma lista ordenada de números invertidos. Pode haver duplicatas nessa lista classificada. Preciso encontrar a contagem para cada número único nessa lista.
Por exemplo, se a saída de cmd1 for
100 100 100 99 99 26 25 24 24
Eu preciso de outro comando para canalizar a saída acima, para que eu tenha:
100 3 99 2 26 1 25 1 24 2
Inclua também o comutador -u. Assim você teria:
cmd1 | sort -gru
A partir do tipo de página:
-u, --unique(Estou supondo que sua entrada seja um número por linha, já que é esse tipo de saída.)
Você pode tentar o awk:
<your_command> | awk '{numbers[$1]++} END {for (number in numbers) print number " " numbers[number]}'
Isso forneceria uma lista não ordenada (a ordem em que as matrizes são percorridas no awk é indefinida, até onde eu sei), então você teria que classificar do seu jeito novamente.
$ echo '100 100 100 99 99 26 25 24 24' | perl -e 'while (<>) { chomp; my %nums; foreach (split(/ /)) { $nums{$_} += 1; }; foreach (sort {$b <=> $a} keys %nums) { print "$_ $nums{$_} " }; print "\n"; }'
100 3 99 2 26 1 25 1 24 2