【发布时间】:2017-08-24 09:34:22
【问题描述】:
我在获取数组索引进行比较和显示结果方面几乎没有问题。我有一个制表符分隔文件,有 9 列和 100 多行。我想将第 i 行的第 8 列元素与第 i+1 行的第 7 列元素进行比较。如果它小于第 7 列元素,则打印整行,如果大于第 7 列元素,则比较两行的第 6 个元素,如果第 6 个元素更大,则仅打印该行。
示例文件
Recep_L_domain PF01030.22 112 sp|P00533|EGFR_HUMAN 2.50E-30 104.7 57 167 Receptor
Furin-like PF00757.18 149 sp|P00533|EGFR_HUMAN 4.10E-29 101.3 185 338 Furin-like
Recep_L_domain PF01030.22 112 sp|P00533|EGFR_HUMAN 3.60E-28 97.8 361 480 Receptor
GF_recep_IV PF14843.4 132 sp|P00533|EGFR_HUMAN 1.60E-46 157.2 505 636 Growth
Pkinase PF00069.23 264 sp|P00533|EGFR_HUMAN 2.70E-39 135 712 964 Protein
Pkinase_Tyr PF07714.15 260 sp|P00533|EGFR_HUMAN 8.40E-88 293.9 714 965 Protein
例如,如果我们比较最后两行,那么第 8 列元素大于下一行的第 7 列元素,那么在这种情况下,它应该比较两个第 6 列元素并打印唯一更大的行。所以从这两行它应该只打印最后一行。对我来说,下面的代码只打印较小的值,但我想问如果第 8 列较大,如何比较第 6 个元素并打印结果?
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
open(IN,"<samplecode.txt");
my @Alifrom;
my @Alito;
my @data; ## multidimensional array
while(<IN>){
chomp $_;
#next if $_=undef;
my @line = split("\t", $_);
##my($a, $b, $c, $d, $e, $f, $g, $h, $i) = split(/\t/,$_); // catch data and storing into multiple scalar variable
push @data, [@line];
}
for (my $i = 0; $i < @data ; $i++){
if ($data[$i][7] gt $data[$i][6]){
for (my $j = 0; $j < @{$data[$i]}; $j++){
#@Alifrom = map $data[$i][$j+6], @data;
print "$data[$i][$j]\t";
}
}
#else
print "\n";
}
【问题讨论】:
-
有什么问题?它是否给出了错误的输出?它对我来说运行没有错误。
-
你好像忘了问一个问题。你有什么问题?
-
是的,它编译但尚未实现第 6 个元素比较逻辑,它现在正在打印所有行,而不是我需要的。任何指导都应该有所帮助。
-
我的问题和信息清楚吗?
标签: arrays perl multidimensional-array