我有一个文件(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 ..是相同情况的不同示例)。现在进行的比较是:
当第二个coloumn值低于相同情况的相应示例时,然而第三个coloumn值高于相应的值 - 它应该打印行。
例如,前两行是这样的情况,其中第二列值70 <100而非1.64119> 1。 1.55602(应该打印)
其他两个案例的其余部分是2美元(例1)&gt; $ 2(example2)以及$ 3(example1)&gt; 3美元(例2)。
大约有10个相同哈希(case)的例子
答案 0 :(得分: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进行比较,或者是否显示最后一个,或最后一个打印。