目前我使用:
#!/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)
生成直方图输出.但如果没有长度行,输出会自动省略它们.有没有办法让函数不省略那些行?有任何想法吗?
您的意思是要为每个不出现的长度打印一个零,直到最大长度吗?如果是这样:
$ 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)