这是一个类似的问题这个
我想进行字数统计,但这次使用数组。
例如,我在名为 的 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