搜索
查看: 306|回复: 4

perl脚本求助,求区间内的SNP个数

[复制链接]

1

主题

2

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2018-9-20 14:30:18 | 显示全部楼层 |阅读模式
snp.list
chr1        1
chr1        3
chr1        5
chr1        13
chr1        26
chr2        13
chr2        16
chr2        18
chr2        20
chr2        25
chr2        38
chr3        14
chr3        25
chr3        30       

stack.txt
chr1        1        1        8
chr1        2        13        30
chr2        3        3        10
chr2        4        18        23
chr3        5        1        9
chr3        6        15        29
stack.txt 第2列为id,从1开始;第三列为起始位置,第四列为终止位置,求在每一段区间内的snp个数,第一行为0,第二行为2等等
求助,perl脚本





上一篇:R for Data Science-012 运算符
下一篇:R数据科学 chapter10
回复

使用道具 举报

7

主题

25

帖子

144

积分

注册会员

Rank: 2

积分
144
发表于 2018-9-22 20:00:27 | 显示全部楼层
没明白你的意思?snp.list中第二列是什么意思?
回复 支持 反对

使用道具 举报

1

主题

2

帖子

30

积分

新手上路

Rank: 1

积分
30
 楼主| 发表于 2018-9-25 15:45:43 | 显示全部楼层
546397641 发表于 2018-9-22 20:00
没明白你的意思?snp.list中第二列是什么意思?

snp在染色体的位置,然后想统计在不同区段的SNP的个数
回复 支持 反对

使用道具 举报

0

主题

2

帖子

31

积分

新手上路

Rank: 1

积分
31
发表于 2018-9-29 10:39:41 | 显示全部楼层
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl  -w 
use strict;
open IN,"<snp.list" or die "open error: $!";
open IN1,"<stack.txt" or die "open error: $!";
open OUT,">result.txt" or die "open error: $!";
my (@snp,@snp1);
my $i = 0;
@snp = <IN>;
while(<IN1>)
{
chomp;
@snp1 = split/\t/,$_;
foreach my $a (@snp)
{
my @b = split/\t/,$a;
if($b[0] eq $snp1[0] and $b[1] >= $snp1[2] and $b[1] <= $snp1[3])
{
$i++;
}
}
print OUT $snp1[0],"\t",$snp1[1],"\t",$snp1[2],"\t",$snp1[3],"\t",$i,"\n";
$i = 0;
}
close IN;
close IN1;
close OUT;
回复 支持 反对

使用道具 举报

7

主题

25

帖子

144

积分

注册会员

Rank: 2

积分
144
发表于 2018-10-8 22:55:21 | 显示全部楼层
三生石 发表于 2018-9-25 15:45
snp在染色体的位置,然后想统计在不同区段的SNP的个数

你的意思是,id=1,起始位置1-8,所以包括1,3,5三个snp
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2018-10-24 01:19 , Processed in 0.109867 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.