我想编写一个执行以下操作的脚本:用户可以选择导入一个 .txt 文件(为此我已经编写了代码)(here $list1
)。该文件仅包含一列,每行都有名称。如果用户导入了一个非空文件,那么我想将另一个文件(此处$file2
)的列中的名称与导入文件中的名称进行比较。我有一个匹配,那么这个原始文件的整行($file2
)应该放在一个新文件中($filter1
)中。
这是我到目前为止所拥有的:
my $list1;
if (prompt_yn("Do you want to import a genelist for filtering?")){
my $genelist1 = prompt("Give the name of the first genelist file:\n");
open($list1,'+<',$genelist1) or die "Could not open file $genelist1 $!";
}
open(my $filter1,'+>',"filter1.txt") || die "Can't write new file: $!";
my %hash1=();
while(<$list1>){ # $list1 is the variable from the imported .txt file
chomp;
next unless -z $_;
my $keyfield= $_; # this imported file contains only one column
$hash1{$keyfield}++;
}
seek $file2,0,0; #cursor resetting
while(<$file2>){ # this is the other file with multiple columns
my @line=split(/\t/); # split on tabs
my $keyfield=$line[2]; # values to compare are in column 3
if (exists($hash1{$keyfield})){
print $filter1 $_;
}
}
运行此脚本时,我的输出filter1.txt
为空。这是不正确的,因为列之间肯定存在匹配。