I like a Perl solution:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @result = ( '' );
my @plan = (
[ qw/ CAT CAC / ],
[ qw/ TGG / ],
[ qw/ GTT GTC GTA GTG / ],
[ qw/ CCT CCC CCA CCG / ],
);
for my $step ( @plan )
{
my @new_result;
for my $suffix ( @$step )
{
push @new_result, map { "$_$suffix" } @result;
}
@result = @new_result;
}
print Dumper(\@result);
though I was surprised that bash's (4.1.2) echo would do what you want:
#!/bin/bash
echo {CAT,CAC}TGG{GTT,GTC,GTA,GTG}{CCT,CCC,CCA,CCG}