Tuesday, July 13, 2010

Permutation Generation in the Unix Shell

Okay, so I was chatting with a friend over lunch recently about generating permutations that could be used, say, as test inputs. If we have a known number of sets of elements, then simple nested loops would work just fine. However, if we don't know ahead of time how many sets we'd like to produce permutations for, then it becomes a bit more challenging to produce permutations. You could write some code to do this recursively, but who really wants to do that.

Coming to the rescue is the Unix Shell (works fine with Cygwin Bash Shell also). Check this out.

echo {a,b,c}{11,22,33}{zyx,wvut,srq}
a11zyx a11wvut a11srq a22zyx a22wvut a22srq a33zyx a33wvut a33srq b11zyx b11wvut b11srq b22zyx b22wvut b22srq b33zyx b33wvut b33srq c11zyx c11wvut c11srq c22zyx c22wvut c22srq c33zyx c33wvut c33srq
Altering the output format to suit your needs is simple as well.

echo \({a,b,c},{1,2,3}\) | sed 's/ /\n/g'


How cool is that? I wish I knew about this handy trick before today.

No comments: