It seems that you are already strugging with the *algorithm*, and not with the implementation.
Here is how I would approach the problem:
What you basically have, is an ordered list of items (A B C D E ..... ) and you want to generate all consecutive runs from it. For example, B C D is such a run. Also, you don't consider a single element (D) by itself as a "run".
If you think about the whole list being an array, a run can represented by two array indices, which are different and where the first index is lower than the other. In the example above, the run B C D can be - assuming that we start index count in the array by 1 - by the pair (2,4), because B is the second and D is the fourth element.
Since it is trivial to generate the actual list of elements, when you have the index pair as described above, your problem boils down to generate all such index pairs.
Assuming that your array contains N elements and N>1, you generate all pairs matching the above restrictions by two nested loops. Without focusing on a particular programming language, the algorithm can be sketched as
for i from 1 to N-1
for j from i+1 to N
generate run (i,j)
Of course you need to generate your array before, but as this doesn't request some clever algorithm, I left out this part for brevity.
Now you have the algorithm, and you can turn it in any language of your choice, so the next step would be to choose the language. You *can* do it in awk, in the same way as you can fetch one bottle of milk from the grocer round the corner by using a truck, but there are plenty of languages around, and maybe the choice of the language is also influenced by what you are going to do with the data afterwards.
I personally would do it in Ruby or in Zsh, but others might consider Python or ksh or C++ or LISP instead. Take that language which you are familiar with, or which you are eager to learn.