Подсчет дубликатов в отсортированной последовательности с использованием инструментов командной строки
У меня есть команда (cmd1), которая просматривает файл журнала, чтобы отфильтровать набор чисел. Числа в случайном порядке, поэтому я использую sort -gr
получить обратно отсортированный список номеров. В этом отсортированном списке могут быть дубликаты. Мне нужно найти количество для каждого уникального номера в этом списке.
Например, если выходные данные cmd1
100 100 100 99 99 26 25 24 24
Мне нужна другая команда, к которой я могу передать вышеприведенный вывод, чтобы я получил:
100 3 99 2 26 1 25 1 24 2
4 ответа
Если вы можете обработать вывод в несколько ином формате, вы можете сделать:
cmd1 | tr " " "\n" | uniq -c
Вы вернетесь:
3 100
2 99
1 26
1 25
2 24
Также добавьте ключ -u. Таким образом вы бы имели:
cmd1 | sort -gru
Из справочной страницы сортировки:
-у, --uniqueбез -c вывести только первое из одинакового прогона
(Я предполагаю, что ваш ввод - одно число на строку, так как это будет вывод сортировки.)
Вы можете попробовать awk:
<your_command> | awk '{numbers[$1]++} END {for (number in numbers) print number " " numbers[number]}'
Это даст вам несортированный список (насколько я знаю, порядок, в котором проходят массивы в awk, не определен), так что вам придется снова сортировать по своему вкусу.
$ 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