특정 위치에 다른 문자를 조합한 것

특정 위치에 다른 문자를 조합한 것

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"이므로 이식성이 뛰어납니다.

관련 정보