### Pure bash, 120 bytes d="$@" d=${d//[ -z]/#} for a;do((b[${#a}]++));done e="${!b[@]}" for((i=1;i<=${e##* };i++));do echo $i\|${d:0:b[i]} done Sample: ./histogram.sh Very long strings of words should be just as easy to generate a histogram just as short strings of words are easy to generate a histogram for. 1|## 2|####### 3|# 4|####### 5|### 6|# 7|## 8|## 9|## ### Save 8 chars by using one fork to `tr`: 112 for a;do((b[${#a}]++));done e="${!b[@]}" for((i=1;i<=${e##* };i++));do printf "%d|%${b[i]}s\n" $i done|tr \ \# Give same result: bash -c 'for a;do((b[${#a}]++));done;e="${!b[@]}";for((i=1;i<=${e##* };i++)); do printf "%d|%${b[i]}s\n" $i;done|tr \ \#' -- $( sed 's/<[^>]*>//g; s/<[^>]*$//;s/^[^<]*>//' < /usr/share/scribus/loremipsum/english.xml ) render (on my host:) 1|############################################################ 2|################################################################################################################################################################################################################# 3|#################################################################################################################################################################################################################################################### 4|#################################################################################################################################################################################################### 5|#################################################################################################################################################################### 6|####################################################################################### 7|########################################################################################## 8|################################################### 9|############################### 10|#################### 11|######### 12|############ 13|##### 14|#### 15|## 16| 17| 18| 19| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 30| 31| 32| 33| 34|#