首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >散列中的基因表达数据

散列中的基因表达数据
EN

Stack Overflow用户
提问于 2013-02-06 11:34:06
回答 2查看 140关注 0票数 0

我有两个数据文件:一个包含基因表达数据,另一个包含基因组注释数据。我必须比较一个文件的第1列和第2列中的值,如果1>2,则输出该行以及在注释数据文件的同一行中找到的refseq id。

到目前为止,我已经打开了这两个文件进行读取:

代码语言:javascript
复制
#!usr/bin/perl
use strict;
use warnings;

open (my $deg, "<", "/data/deg/DEG_list.txt") or die $!;
open (my $af "<", "/data/deg/Affy_annotation.txt") or die $!;

# I want to store data in hash

my %data;
while (my $records = <$deg>) {
  chomp($records);

  # the first line is labels so we want to skip this
  if($records =~ /^A-Z/) {
    next;
  else {
    my @columns = split("/\s/", $records);

    if ($columns[2] > $columns[1]) {
      print $records;
    }
  }
}

我想在每次发生这种情况时打印这一行,但我还想打印在另一个数据文件中找到的基因id。我不确定如何做到这一点,加上我现在的代码不工作,因为它不只是打印行。

EN

回答 2

Stack Overflow用户

发布于 2013-02-06 12:15:54

除了这里和那里缺少括号之外,您的问题可能是您的正则表达式

代码语言:javascript
复制
if($records =~ /^A-Z/) {

这将查找以此文字字符串开头的行,例如A-Zfoobar,而不是您可能认为的任何以大写字母开头的字符串。您可能需要:

代码语言:javascript
复制
if($records =~ /^[A-Z]/) {

方括号表示内部有范围的字符类。

您还应该知道,split /\s/, ...拆分到一个空格上,这可能不是您想要的,因为它会为您拥有的每个额外的空格创建空域。除非您显式地希望在单个空格上拆分,否则您可能希望

代码语言:javascript
复制
split ' ', $records;

它将拆分成多个连续的空格,并去掉前导空格。

票数 1
EN

Stack Overflow用户

发布于 2013-02-06 16:20:15

代码中的两个主要问题

代码语言:javascript
复制
if($records =~ /^A-Z/) ...

如果你想检测一行开头的字母,你最好

代码语言:javascript
复制
if($records =~ /^[a-z]/i) ... starting with any letter
if($records =~ /^[A-Z]/) ...  starting with big letter

和在

代码语言:javascript
复制
my @columns = split("/\s/", $records);

正则表达式在这里是一个字符串...(自引用),要让正则表达式删除引号

代码语言:javascript
复制
my @columns = split(/\s/, $records);

但是,如果即使有多个空格也要拆分字段,请使用

代码语言:javascript
复制
my @columns = split(/\s+/, $records);

而不是。

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

https://stackoverflow.com/questions/14721023

复制
相关文章

相似问题

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