2017-07-17 13 views
0

私は文字列を持っており、同じシーケンスでそれらを保持しながら、それらのグループの可能な組み合わせをすべて取得したいと考えています。私は、n-gramアプローチのようなことをして、結果を連結することを考えました。すべての文字列の区切りの組み合わせを取得

Iは、例えば、文字列の持っているのであれば:

を私は(順不同)を取得したいと思います:

aa | bb cc dd 
aa bb | cc dd 
aa bb cc | dd 
aa | bb cc | dd 
aa | bb | cc dd 
aa bb | cc | dd 
aa | bb | cc | dd 

私はbashやPythonで答えを好むだろう。

+1

これは確かにbashで可能ですが、特に良い考えではありません。あなたに "本当の"言語はありませんか? Python? Perl? – slim

+0

@slim pythonが可能ですが、タイトルを変更することができます – badner

+1

'aa | bb | cc dd'が期待される出力で繰り返されます...あなたも同様に質問しようとしたものを追加してください... – Sundeep

答えて

3

これは再帰関数を用いて達成することができる。

停止する場合は、パラメータの空のリストです - のでwhileループが入力されません。

そうでなければ私たちが望む:

  • をパラメータ等の最初のパラメータ(すなわち "AA" を使用して行うことができ、各グループ、 "AAのBB"、 "AAのBBのCC" について
  • 供給されます続い
    • そのグループ、「|」残りのパラメータの可能なグループ分けの各々続い
だから、

#!/bin/bash 

combos() 
{ 
    head="" 
    echo [email protected] 
    while [[ $# -gt 0 ]]; do 
     head="$head $1" 
     shift 
     combos [email protected] | sed "s/^/$head |/" 
    done 
} 


combos aa bb cc dd 

これは| sおよび1つのグループの繰り返しを末尾に、いくつかの矛盾の間隔を持っています。これらはすべて整えることができます - 私はそれを運動として残しました。

+0

私はクリーンアップを処理することができます。これは魅力のように機能します – badner

関連する問題