Kombinationen verschiedener Buchstaben an bestimmten Positionen

Kombinationen verschiedener Buchstaben an bestimmten Positionen

Unter Unix versuche ich, alle möglichen Kombinationen dieser Buchstaben an sechs bestimmten Positionen wie folgt zu erstellen:

  • Position 1 - A oder B oder C
  • Position 2 - A oder C
  • Position 3 - nur C
  • Position 4 - A oder D
  • Position 5 - B oder C
  • Position 6 - C oder A

Die Kombinationen könnten beispielsweise AACABC, BACABC, ... sein.

Gibt es eine schnelle Möglichkeit, wie UNIX-Tools dies tun können?

Antwort1

Die Anforderungen entsprechen der Strebenerweiterung

{A,B,C}{A,C}C{A,D}{B,C}{C,A}

Dies erweitert sich auf 48 Zeichenfolgen (48 = 3*2*1*2*2*2):

$ printf '%s\n' {A,B,C}{A,C}C{A,D}{B,C}{C,A}
AACABC
AACABA
AACACC
AACACA
AACDBC
AACDBA
AACDCC
AACDCA
ACCABC
ACCABA
ACCACC
ACCACA
ACCDBC
ACCDBA
ACCDCC
ACCDCA
BACABC
BACABA
BACACC
BACACA
BACDBC
BACDBA
BACDCC
BACDCA
BCCABC
BCCABA
BCCACC
BCCACA
BCCDBC
BCCDBA
BCCDCC
BCCDCA
CACABC
CACABA
CACACC
CACACA
CACDBC
CACDBA
CACDCC
CACDCA
CCCABC
CCCABA
CCCACC
CCCACA
CCCDBC
CCCDBA
CCCDCC
CCCDCA

Antwort2

Das klingt nach einem Job für verschachtelte forSchleifen:

#!/bin/bash

for p1 in A B C; do
  for p2 in A C; do
    for p3 in C; do
      for p4 in A D; do
        for p5 in B C; do
          for p6 in C A; do
            echo "$p1$p2$p3$p4$p5$p6"
          done
        done
      done
    done
  done
done

Es mag externe Tools geben, die das eleganter machen, aber dieser Weg ist „100 % Bash“ und daher ziemlich portabel.

verwandte Informationen