Perl 基于map的类值插补

Perl 基于map的类值插补,perl,awk,data-processing,Perl,Awk,Data Processing,我想根据已知标记类的接近程度来估算标记类(A类或B类)。例如,如果我知道M1和M4是A类,那么地图上位于M1和M4之间的所有标记也可以归类为A 如果我知道标记M4是A类,其位置是chr1 13,标记M7是位置为16的B,那么我们可以将位置小于等于(13+16)/2=14.5的所有标记分类为A,并且将同一染色体上14.5和16之间的所有标记分类为B。所以M5是A,M6可以归类为B 我有一张标记排序位置的地图 M0 chr1 9 M1 chr1 10 M2 chr1 11 M

我想根据已知标记类的接近程度来估算标记类(A类或B类)。例如,如果我知道M1和M4是A类,那么地图上位于M1和M4之间的所有标记也可以归类为A

如果我知道标记M4是A类,其位置是chr1 13,标记M7是位置为16的B,那么我们可以将位置小于等于(13+16)/2=14.5的所有标记分类为A,并且将同一染色体上14.5和16之间的所有标记分类为B。所以M5是A,M6可以归类为B

我有一张标记排序位置的地图

M0  chr1    9
M1  chr1    10
M2  chr1    11
M3  chr1    12
M4  chr1    13
M5  chr1    14
M6  chr1    15
M7  chr1    16
M8  chr2    1
M9  chr2    2
M10 chr2    3
M11 chr2    4
所以给出了一个简单的

M1  A
M4  A
M7  B
M8  B
M10 A
如果可能的话,我想估算地图上的其他标记

所以我想要的输出是

M1  A
M2  A
M3  A
M4  A
M5  A
M6  B
M7  B
M8  B
M9  B
M10 A

我是一名生物学家,试图学习一点awk,并重新解释这可能只是一个计算问题,我不知道从哪里开始。请帮忙。我可以访问unix集群来运行awk和perl。请注意,正确的插补只能在映射到同一染色体的标记之间进行。

您从未回答过我的任何问题,因此这里有一个Perl解决方案,可以进行大量猜测

使用严格;
使用“全部”警告;
使用自动模具;
我的(@markers,%markers);
{

打开我的$fh,'你真的应该尝试一些东西,特别是如果你正在尝试学习awk。如果未知落在已知a和已知B之间的中点怎么办?例如,在你的示例数据中,如果已知M5是a,M7是B,你会给M6分配什么?它会像M0和M11一样变得未知吗?因为你已经对数据进行了排序,所以wo的一半rk已经完成。您需要逐个处理连续已知类之间的每个序列,并相应地为未知数分配值。因此,M1到M4是微不足道的,然后M4到M7稍微小一些。您需要检查一个间隔是否穿过像M7到M8这样的染色体边界,在这种情况下,无法插补任何值,最后是M8到M10是直截了当的。很抱歉,由于暴风雨,出现了一些大停电,我无法及时回复您……介于两者之间的标记可以通过任何一种方式进行分类,在我提到的示例中,它们不等于第一次分类的平均值。让我用代码进行一些测试,然后回复您。我还将询问您abo但是如果我自己不能理解代码逻辑,那将是一次很好的学习经验。再次感谢。