
我有一個命令(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
(我假設您的輸入是每行一個數字,因為這就是排序會輸出的內容。)
你可以嘗試 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