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