テーブル操作

テーブル操作

ゲノム座標と最後の列が一般名である3つのファイルがあります。

ファイル1.

X 1 100 B
Y 101 200 B
Z 1 50 B

ファイル2.

X 200 300 A 
Y 101 200 A
Z 1 50 A

ファイル3.

X 1 100 C
Y 200 300 C
Z 1 50 C

最後の列に基づいてデータを計算したいと思います。

Name Value1 Value2 A B C
X 1 100 No Yes Yes
X 200 300 Yes No No
Y 101 200 Yes Yes No
Y 200 300 No No Yes
Z 1 50 Yes Yes Yes

.. このように。

助けてもらえますか?

ベストアンサー1

アッ解決策:

awk 'function get_mask(keys){ 
         mask=""; 
         for(i in h) { 
             res=(keys~i)?"Yes":"No"; mask=(mask!="")? mask FS res:res 
         } 
         return mask 
     }
     { k=$1 FS $2 FS $3 }{ h[$4]; a[k]=(a[k])? a[k]$4:$4 }
     END{ 
         h_line=""; for(i in h) h_line=(h_line=="")? i:h_line FS i;
         printf "Name Value1 Value2 %s\n",h_line;
         for(j in a) printf "%s %s\n", j, get_mask(a[j]) 
     }' file{1,2,3}

出力:

Name Value1 Value2 A B C
Z 1 50 Yes Yes Yes
Y 101 200 Yes Yes No
Y 200 300 No No Yes
X 1 100 No Yes Yes
X 200 300 Yes No No

おすすめ記事