
以下のような大きなテキストファイルがあります。ここで、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
この場合)として使用することです。その後、ファイルを読み取るときにそのキーに関連する値を増やすことができます。