Bash
Bash - 對數組進行排序和 uniq
這是一個與此類似的問題
我想計算字數,但這次使用數組。
例如,我在一個名為
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