2つの列に基づく文字列のペア別の組み合わせ

2つの列に基づく文字列のペア別の組み合わせ

各データスタックに使用できる文字列のペア別の組み合わせを取得しようとしています。

入力ファイルには2つの列が含まれています。 col1は遺伝子名、col2はさまざまなストレス要因の名前です。

        gene1   FishKairomones
        gene1   Microcystin
        gene1   Calcium
        gene2   Cadmium
        gene2   Microcystis
        gene2   FishKairomones
        gene2   Phosphorous
        gene3   FishKairomones
        gene3   Microcystin
        gene3   Phosphorous
        gene3   Cadmium

したがって、表に示すように、gene1は魚のカイロモン、ミクロシスチン、カルシウムの3つのストレス要因に反応します。

私は次のペア別のテーブルを取得したいと思います。

    gene1   FishKairomones  gene1   Microcystin
    gene1   FishKairomones  gene1   Calcium
    gene1   Microcystin gene1   Calcium
    gene2   Cadmium gene2   Microcystis
    gene2   Cadmium gene2   FishKairomones
    gene2   Cadmium gene2   Phosphorous
    gene2   Microcystis gene2   FishKairomones
    gene2   Microcystis gene2   Phosphorous
    gene2   FishKairomones  gene2   Phosphorous

ご覧のとおり、遺伝子1フィッシュカレーンは遺伝子1ミクロシスチンに関連し、遺伝子1フィッシュカレーンは遺伝子1カルシウムに関連し、遺伝子1ミクロシスチンは遺伝子1カルシウムに関連している。繰り返しますが、私はすべての遺伝子に対してこれを行いたいと思います。

時々、遺伝子は3つのストレス要因を持ち、時には4つなどを持つことがあります。

私はここでコードを試しました。"cat"ファイルのすべての行をペアに拡張するためのコマンドラインツール

これは私が望むものではなく、ファイル全体のすべてのペアごとの組み合わせを生成します。

ベストアンサー1

AWKソリューション(さらに無秩序入力ライン):

awk '{ a[$1]=($1 in a? a[$1]",":"")$2 }   # grouping `stressors` by `gene` names
     END { 
         for (k in a) {                   # for each `gene`
             len=split(a[k], b, ",");     # split `stressors` string into array b
             for (i=1;i<len;i++)          # construct pairwise combinations
                 for (j=i+1;j<=len;j++)   # between `stressors` 
                     print k,b[i],k,b[j] 
         } 
     }' file

出力:

gene1 FishKairomones gene1 Microcystin
gene1 FishKairomones gene1 Calcium
gene1 Microcystin gene1 Calcium
gene2 Cadmium gene2 Microcystis
gene2 Cadmium gene2 FishKairomones
gene2 Cadmium gene2 Phosphorous
gene2 Microcystis gene2 FishKairomones
gene2 Microcystis gene2 Phosphorous
gene2 FishKairomones gene2 Phosphorous
gene3 FishKairomones gene3 Microcystin
gene3 FishKairomones gene3 Phosphorous
gene3 FishKairomones gene3 Cadmium
gene3 Microcystin gene3 Phosphorous
gene3 Microcystin gene3 Cadmium
gene3 Phosphorous gene3 Cadmium

おすすめ記事