击默认使用稀疏数组。例如。这里可能是holes
在数组中。您可以通过预先初始化(填充)数组来避免它们。当然,你需要估计最大指数。例如当你将运行像
printf "%s\n" 1 123 123 123456 | bash the_script
之后添加到顶部
histogram=($(printf "%0.s0\n" {1..10})) # generate 10 zeroes
您将获得:
0 0
1 1
2 0
3 2
4 0
5 0
6 1
7 0
8 0
9 0
或,如果你不想事先初始化,您需要检查给定成员的存在,并为每一个做周期
while read line
do
((histogram[${#line}]++))
done < "${1:-/dev/stdin}"
max=$(printf "%s\n" "${!histogram[@]}" | sort -nr | head -1)
for ((length=0; length<=max; length++)) {
val=${histogram[$length]:-0}
printf "%-1s %s\n" "${length}" "$val"
}
例如对于上述printf "%s\n" 1 123 123 123456 | bash the_script
0 0
1 1
2 0
3 2
4 0
5 0
6 1
聪明的脚本,但它不清楚你期望的结果是什么。你能提供一个预期的输入和输出的例子吗? – l0b0