У меня есть команда (cmd1), которая просматривает файл журнала, чтобы отфильтровать набор чисел. Номера расположены в случайном порядке, поэтому я использую sort -gr
чтобы получить список чисел, отсортированный в обратном порядке. В этом отсортированном списке могут быть дубликаты. Мне нужно найти количество для каждого уникального числа в этом списке.
Например, если вывод cmd1 будет
100 100 100 99 99 26 25 24 24
Мне нужна другая команда, в которую я могу передать вывод, указанный выше, чтобы получить:
100 3 99 2 26 1 25 1 24 2
Если вы можете обрабатывать вывод в немного другом формате, вы можете сделать:
cmd1 | tr " " "\n" | uniq -c
Вы вернетесь:
3 100
2 99
1 26
1 25
2 24
Также добавьте ключ -u. Таким образом, у вас будет:
cmd1 | sort -gru
Из справочной страницы сортировки:
-u, --unique(Я предполагаю, что ваш ввод - это одно число в строке, так как это будет вывод.)
Вы можете попробовать 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