擊默認使用稀疏數組。例如。這裏可能是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