4.3BSD/usr/contrib/icon/samples/wordcount.dat

#
#	W O R D   T A B U L A T I O N
#

#  This main procedure processes standard input and writes the results
#  with the words in a column 20 characters wide.

procedure main()
   wordcount(20)
end

procedure wordcount(n)
   local t, line, x, y
   static letters
   initial letters := &lcase ++ &ucase
   t := table(,0)
   every line := !&input do
      scan line using
         while tab(upto(letters)) do
            t[tab(many(letters))] +:= 1
   x := sort(t)
   every y := !x do write(left(y[1],n),y[2])
end