我有一个命令 (cmd1),它通过 grep 查询日志文件以过滤出一组数字。这些数字是随机排列的,所以我用它sort -gr
来获取一个反向排序的数字列表。这个排序列表中可能会有重复项。我需要找到该列表中每个唯一数字的计数。
例如,如果 cmd1 的输出是
100 100 100 99 99 26 25 24 24
我需要另一个命令来将上述输出传送到该命令,以便得到:
100 3 99 2 26 1 25 1 24 2
答案1
如果您可以处理稍微不同的格式的输出,您可以执行以下操作:
cmd1 | tr " " "\n" | uniq -c
你会得到以下回复:
3 100
2 99
1 26
1 25
2 24
答案2
还要添加 -u 开关。因此,您将获得:
cmd1 | sort -gru
来自排序手册页:
-u, --unique不带 -c,仅输出相同运行中的第一个
答案3
(我假设您的输入是每行一个数字,因为这就是 sort 的输出。)
您可以尝试 awk:
<your_command> | awk '{numbers[$1]++} END {for (number in numbers) print number " " numbers[number]}'
这会给你一个未排序的列表(据我所知,在 awk 中遍历数组的顺序是未定义的),所以你必须再次按你的喜好排序。
答案4
$ 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