一意の識別子を使用してファイルを繰り返し、累積合計を計算します。

一意の識別子を使用してファイルを繰り返し、累積合計を計算します。

以下のような大きなテキストファイルがあります。ここで、column1-colum3 は範囲を定義し、4 番目の列は一意の識別子です。列 6 はゾーンに指定された値です。

chr6    26204834    26204839    region1 +   119.862 chr6    26204834    26204835    +   0.982
chr6    26204834    26204839    region1 +   119.862 chr6    26204835    26204836    +   8.487
chr6    26204834    26204839    region1 +   119.862 chr6    26204836    26204837    +   2.664
chr6    26204834    26204839    region1 +   119.862 chr6    26204837    26204838    +   105.065
chr6    26204834    26204839    region1 +   119.862 chr6    26204838    26204839    +   2.664
chr18   72218300    72218307    region2 +   113.879 chr18   72218300    72218301    +   0.982
chr18   72218300    72218307    region2 +   113.879 chr18   72218303    72218304    +   1.357
chr18   72218300    72218307    region2 +   113.879 chr18   72218304    72218305    +   4.887
chr18   72218300    72218307    region2 +   113.879 chr18   72218305    72218306    +   1.706
chr18   72218300    72218307    region2 +   113.879 chr18   72218306    72218307    +   104.947

ここで、列7〜9は下位領域であり、列11は下位領域の指定値です。

結果:各識別子の各サブゾーンに累積合計を割り当てたいと思います。

cat input | grep region1 | awk '{ sum+=$11 } { print $0"\t"sum/$6 }'

これにより、識別子に対する正しい予想出力が得られます。

chr6    26204834    26204839    region1 +   119.862 chr6    26204834    26204835    +   0.982   0.00819276
chr6    26204834    26204839    region1 +   119.862 chr6    26204835    26204836    +   8.487   0.0789992
chr6    26204834    26204839    region1 +   119.862 chr6    26204836    26204837    +   2.664   0.101225
chr6    26204834    26204839    region1 +   119.862 chr6    26204837    26204838    +   105.065 0.977774
chr6    26204834    26204839    region1 +   119.862 chr6    26204838    26204839    +   2.664   1

他の識別子にも同様に適用されます。

cat input | grep region2 | awk '{ sum+=$11 } { print $0"\t"sum/$6 }' 


chr18   72218300    72218307    region2 +   113.879 chr18   72218300    72218301    +   0.982   0.00862319
chr18   72218300    72218307    region2 +   113.879 chr18   72218303    72218304    +   1.357   0.0205393
chr18   72218300    72218307    region2 +   113.879 chr18   72218304    72218305    +   4.887   0.0634533
chr18   72218300    72218307    region2 +   113.879 chr18   72218305    72218306    +   1.706   0.0784341
chr18   72218300    72218307    region2 +   113.879 chr18   72218306    72218307    +   104.947 1

配列のすべての識別子を定義し、テキストファイルを実行してそれらを自動化するにはどうすればよいですか?

ベストアンサー1

1つの方法は次のとおりです。

$ awk -vOFS='\t' '{ a[$4]+=$11/$6; print $0,a[$4]}' file 
chr6    26204834    26204839    region1 +   119.862 chr6    26204834    26204835    +   0.982   0.00819276
chr6    26204834    26204839    region1 +   119.862 chr6    26204835    26204836    +   8.487   0.0789992
chr6    26204834    26204839    region1 +   119.862 chr6    26204836    26204837    +   2.664   0.101225
chr6    26204834    26204839    region1 +   119.862 chr6    26204837    26204838    +   105.065 0.977774
chr6    26204834    26204839    region1 +   119.862 chr6    26204838    26204839    +   2.664   1
chr18   72218300    72218307    region2 +   113.879 chr18   72218300    72218301    +   0.982   0.00862319
chr18   72218300    72218307    region2 +   113.879 chr18   72218303    72218304    +   1.357   0.0205393
chr18   72218300    72218307    region2 +   113.879 chr18   72218304    72218305    +   4.887   0.0634533
chr18   72218300    72218307    region2 +   113.879 chr18   72218305    72218306    +   1.706   0.0784341
chr18   72218300    72218307    region2 +   113.879 chr18   72218306    72218307    +   104.947 1

秘密は、ロケール識別子を連想配列のキー(aこの場合)として使用することです。その後、ファイルを読み取るときにそのキーに関連する値を増やすことができます。

おすすめ記事