-2

我有一个文件(abc.txt),其中包含以下值:

ENSP00000200691_1 70.00 1.64119
ENSP00000200691_3 100.00 1.55602
ENSP00000201943_1 93.00 1.14492
ENSP00000201943_2 64.00 1.2178
ENSP00000201943_3 75.00 1.43107
ENSP00000203407_2 90.00 2.04312
ENSP00000203407_4 71.00 1.8197

我想创建一个哈希值,其中诸如 ENSP00000200691 之类的值将是键(_1,_2.. 是同一案例的不同示例)。现在要进行的比较是:

当第二列值低于相同情况下的相应示例,但第三列值高于相应示例时 - 它应该打印行。

例如.. 前两行是这样一种情况,即第二列值 70<100 而 1.64119 > 1.55602 (应该打印)

其余两种情况是 $2(example1) > $2 (example2) 和 $3(example1) > $3 (example2)。

可能有大约 10 个相同哈希的示例(案例)

4

1 回答 1

1

以下是如何解决您的(家庭作业?)问题的猜测:

#!/usr/bin/perl

use strict;
use warnings;

my %info;

while (my $line=<DATA>) {
    chomp $line;
    my ($protein_id, $length, $value)=split /\s+/, $line;
    $protein_id=~s/_\d+$//;

    if (exists $info{$protein_id}) {
        if ($length<$info{$protein_id}->{length} &&
            $value>$info{$protein_id}->{value}) {
            print "$line\n";
        }
    }
    else {
        $info{$protein_id}={ length=>$length, value=>$value };
    }
}

__DATA__
ENSP00000200691_1 70.00 1.64119
ENSP00000200691_3 100.00 1.55602
ENSP00000201943_1 93.00 1.14492
ENSP00000201943_2 64.00 1.2178
ENSP00000201943_3 75.00 1.43107
ENSP00000203407_2 90.00 2.04312
ENSP00000203407_4 71.00 1.8197

运行时的输出是这样的:

ENSP00000201943_2 64.00 1.2178
ENSP00000201943_3 75.00 1.43107

您没有完全指定是否应始终将后续行与第一个蛋白质 id 进行比较,或者是否最后一个看到的,或者最后一个打印的。

于 2012-07-05T18:15:12.650 回答