直方图与bash

Cha*_*ith 7 bash

目前我使用:

#!/bin/bash
while read line
do
    ((histogram[${#line}]++))   
done < "${1:-/dev/stdin}"

for length in "${!histogram[@]}"; do
    printf "%-1s %s\n" "${length}" "${histogram[$length]}"
done
Run Code Online (Sandbox Code Playgroud)

生成直方图输出.但如果没有长度行,输出会自动省略它们.有没有办法让函数不省略那些行?有任何想法吗?

l0b*_*0b0 1

您的意思是要为每个不出现的长度打印一个零,直到最大长度吗?如果是这样:

$ cat test.sh 
#!/bin/bash
while read line
do
    ((histogram[${#line}]++))
done < "${1:-/dev/stdin}"

max=0
for length in "${!histogram[@]}"
do
    if [ $length -gt $max ]
    then
        max=$length
    fi
done

for length in $(seq 0 $max)
do
    printf "%-1s %s\n" "${length}" "${histogram[$length]-0}"
done
Run Code Online (Sandbox Code Playgroud)

运行示例:

$ printf 'x\nfoo\n' | ./test.sh
0 0
1 1
2 0
3 1
Run Code Online (Sandbox Code Playgroud)