Bash - 配列と一意のソート

Bash - 配列と一意のソート

同様の質問です。これ

単語数を計算したいのですが、今回は配列を使います。

たとえば、という bash 配列に次の IP があります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

答え1

努力する:

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

関連:

答え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

関連情報