我有一个大文本文件,如下所示,其中 column1-colum3 定义一个区域,第四列是唯一标识符。第 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
column7-column9 是 sub-region,其中 column11 是 sub-region 的赋值。
输出:我想为每个标识符中的每个子区域分配累积总和。
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
我如何通过在数组中定义所有标识符并通过文本文件运行来自动执行此操作。
这是一种方法:
诀窍是使用区域标识符作为关联数组的键(
a
在本例中为 )。然后,您可以在读取文件时增加与该键关联的值。