使用 bash 进行排列 - 八分之五

使用 bash 进行排列 - 八分之五

假设我有值A B C D E和八个地方1 2 3 4 5 6 7 8。如何通过两次和三次重复打印所有可能的组合?

例子:

1 2 3 4 5 6 7 8
_______________
A A B B C C D E
A B B C C D D E (and so on...)
A A A B B C D E
A B B B C C D E (and so on...)

哪个组合跟哪个组合并不重要。不应该有任何缺失值,例如AABBCCDD (哪里E缺失了)

答案1

zsh使用//ksh93的粗略方法bash可能是:

printf '%s\n' {A..E}{A..E}{A..E}{A..E}{A..E}{A..E}{A..E}{A..E} |
  sed '/A/!d; /B/!d; /C/!d; /D/!d; /E/!d; /\(.\)\(.*\1\)\{3\}/d'

其中我们使用 zsh-style{A..E}生成从到 的所有 5 8 个组合,并删除不包含、或不包含、、或超过 3 个相同字符的组合。AAAAAAAAEEEEEEEEsedABCDE

;s/./ &/2g(GNU sed) 或;s/./ &/g;s/ //(any sed) 添加到sed代码中以在字母之间插入空格。

相关内容