使用命令列工具計算排序序列中的重複項

使用命令列工具計算排序序列中的重複項

我有一個命令(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

相關內容