行名が同じ値をマージする

行名が同じ値をマージする

次の表があります。

   Genes     Category
1. Gene1     dark_11
2. Gene1     dark_9
3. Gene2     dark_7
4. Gene1     dark_5

Category同じ行名を持つ列のコンマ区切り値をマージして、次のようなGenes出力を取得したいと思います。

   Genes      Category
1. Gene1      dark_11, dark_9, dark_5
2. Gene2      dark_7

どんな助けでも大変感謝します。

ベストアンサー1

awk配列を使用して、満たす条件に基づいてインデックスを作成し、関連する各カテゴリを配列の各値に追加できます。たとえば、次のようになります。

awk 'NR==1 {print $0}; NR>1 {if(cat[$2])cat[$2]=cat[$2]", "$3; else cat[$2]=$3;}; END{j=1; for (i in cat) print j++".", i, cat[i]}' test.txt

test.txt入力ファイルです。

配列catには2つの値が含まれます。cat[GeneX]これには、各遺伝子が連結されたカテゴリを含む文字列が含まれます。配列の正しい値にカテゴリを追加する前に、配列が空であることを確認する必要があります。カテゴリ間にカンマを追加するだけです。

おすすめ記事