#Pure Bash (no external programs), 175

This is longer than I'd hoped, but I wanted to see if the necessary counting and sorting (in the right direction) could be done purely with `bash` arrays (associative and non-associative):

<pre>
declare -A c
for w in ${@//[[:punct:]]/ };do((c[$w]++));done
for w in ${!c[@]};do i=${c[$w]};((m=i>m?i:m));s[$i]+=$w:;done
for((i=m;i>0;i--));do printf "${s[i]//:/:$i
}";done
</pre>

Save as a script file, `chmod +x`, and run:

<pre>
$ ./countoccur This is a text and a number: 31.
a:2
and:1
number:1
text:1
31:1
is:1
This:1
$ 
</pre>