编程和测试一些perl脚本的新手。 两组数据和任务是根据它们的相似性或缺乏性将它们分成两个不同的箱。
set 1
chr1 122
chr1 123
chr2 223
chr2 224
set2
chr1 122 abc
chr1 125 def
chr2 223 ghi
chr2 225 jkl
我写的剧本如下。我的问题是,@same
显示预期的输出(在第1组和第2组之间包含相同信息的行),@diff
显示完全不可理解的内容。我误解了if ... else
的用法吗?任何见解将不胜感激!
#! usr/bin/perl
use warnings;
use strict;
open FH1, "comp1.txt" or die $!;
open FH2, "comp2.txt" or die $!;
my ($v1_col1, $v1_col2);
my ($v2_col1, $v2_col2, $v2_col3);
my (@diff, @same);
while (<FH1>) {
($v1_col1, $v1_col2) = split /\t/, $_;
seek FH2, 0, 0;
while (<FH2>) {
($v2_col1, $v2_col2, $v2_col3) = split /\t/, $_;
if ($v1_col2 == $v2_col2) {
push @same, $_;
} else {
push @diff, $_;
}
}
}
print @same, "\n";
答案 0 :(得分:0)
这种情况正在发生:
chr1 122
与chr1 122 abc
进行比较。被认为是平等的 - &gt; chr1 122 abc
去了
到@same
chr1 122
与chr1 125 def
进行比较。认为不平等 - &gt; chr1 125 def
转到@diff
chr1 122
与chr2 223 ghi
进行比较。认为不平等 - &gt; chr2 223 ghi
转到@diff
等等。现在的问题是chr2 223 ghi
与chr1 122
不相等,但您希望它在集合1中等于chr2 223
。
所以,你必须先填写@same
。然后使用@diff
中未找到的值填充@same
。