首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在gen列表中查找SNP的位置

在gen列表中查找SNP的位置
EN

Stack Overflow用户
提问于 2011-08-19 06:22:11
回答 1查看 476关注 0票数 1

我有SNP数据和数据。我正在寻找的立场,SNP在将军名单的数据,当我比较的基因列表。例如:

  1. SNP数据:

Pos_start pos_end 14185 14185 ..。.

  • 的gen列表数据:

5“侧(Pos_start)3”无柄(Pos_end)1 1527 1920 1777 ..

  • 的结果:在SNP的14185位置包含在gen list.

的16185位置。

下面是我的代码,但它在编号排序上有一些问题。

代码语言:javascript
复制
   #!/usr/bin/perl -w

   open(POS1,"<posi1.txt"); (I collect two data and save with posi1.txt) 
    @posi1=<POS1>;
   open(list,">list.txt");
   @list1=@posi1;
   @list2= sort num_last (@list1);
   $list2 = join( '', @list2);

   print $list2;
   print list $list2."\n\n";
   close(list);
  sub num_last {
my ($num_a, $num_b);
$num_a=$a=~ /^[0-9]/;
$num_b=$b=~ /^[0-9]/;
if ($num_a && $num_b){
    return $a<=>$b;
} elsif ($num_a){
    return 1;
} elsif ($num_b){
    return -1;
} else {
    return $a cmp $b;
}
      }

如果你能给我指点,我会很感激的。

EN

回答 1

Stack Overflow用户

发布于 2011-08-19 10:37:22

首先,排序子不对传递的值进行操作。应该有点像

代码语言:javascript
复制
sub num_last {
    my ($num_a, $num_b);
    my ($a,$b) = @_;
    ....
}

如果字符串是从数字开始的,那么实际上只能在字符串中获得第一个数字。最好添加跳过所有领先的空白空间,以防万一。

代码语言:javascript
复制
($num_a) = $a =~ /^\s*(\d+)/;
($num_b) = $b =~ /^\s*(\d+)/;

\d+相当于[0-9]+,但两个字符更短:)。大括号强制list context so,$num_a$num_b接收第一个匹配组的内容:(\d+)

您不需要<=>操作器,因为$num_a$num_b应该是字符串,因此可以将条件简化为:

代码语言:javascript
复制
if (!$num_a)
    return -1;
if (!$num_b)   
    return 1;
return $a cmp $b;

不确定,但它可能和return $a cmp $b一样简单,但我不确定空变量是否比非空字符串要小,而且指尖上没有perl。因此,最后的num_last函数:

代码语言:javascript
复制
sub num_last{
    my ($num_a, $num_b);
    my ($a,$b) = @_;

    ($num_a) = $a =~ /^\s*(\d+)/;
    ($num_b) = $b =~ /^\s*(\d+)/;

    if (!$num_a)
        return -1;
    if (!$num_b)   
        return 1;
    return $a cmp $b;
}

如果需要反向排序,只需将my ($a,$b) = @_;替换为my ($b,$a) = @_;即可。

而且,我在没有任何编译器帮助的情况下编写了它,所以其中可能有一些小错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7117696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档