特定位置不同字母的組合

特定位置不同字母的組合

在 Unix 中,我嘗試在 6 個特定位置創建這些字母的所有可能組合,如下所示:

  • 位置 1 - A 或 B 或 C
  • 位置 2 - A 或 C
  • 位置 3 - 僅 C
  • 位置 4 - A 或 D
  • 位置 5 - B 或 C
  • 位置 6 - C 或 A

例如,組合可以是 AACABC、BACABC、...

UNIX 工具有沒有一種快速的方法可以做到這一點?

答案1

要求對應支架展開

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

這擴展到 48 個字串(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

答案2

這聽起來像是嵌套循環的工作for

#!/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

可能有外部工具可以使這種方式更加優雅,但這種方式是“100% bash”,因此相當可移植。

相關內容