Bash

Bash - 對數組進行排序和 uniq

  • September 30, 2019

這是一個與此類似的問題

我想計算字數,但這次使用數組。

例如,我在一個名為IPS.

IPS=("1.1.1.1" "5.5.5.5" "3.3.3.3" "1.1.1.1" "2.2.2.2" "5.5.5.5" "1.1.1.1")

如果我閱讀它的內容:

user@server~$ "${IPS[*]}"
1.1.1.1 5.5.5.5 3.3.3.3 1.1.1.1 2.2.2.2 5.5.5.5 1.1.1.1

我想要類似的東西:

3 1.1.1.1
2 5.5.5.5
1 3.3.3.3
1 2.2.2.2

嘗試:

printf '%s\n' "${IPS[@]}" |sort |uniq -c |sort -rn |sed 's/^ *//'
3 1.1.1.1
2 5.5.5.5
1 3.3.3.3
1 2.2.2.2

有關的:

您可以使用關聯數組將不同的 IPS 儲存為在迭代 IPS 數組時將遞增的鍵。

#!/bin/bash
IPS=("1.1.1.1" "5.5.5.5" "3.3.3.3" "1.1.1.1" "2.2.2.2" "5.5.5.5" "1.1.1.1")
declare -A arr
for ip in ${IPS[@]};
do
       ((arr[${ip}]++))
done
for k in ${!arr[@]};
do
       echo "${arr[$k]} $k"
done | sort -rn

引用自:https://unix.stackexchange.com/questions/544444