Perl 匹配不同文件的列
我有这样一种情况:我有一个类似file1的文件 文件1 第二个文件如下所示: 文件2 我想要以下输出: 文件3Perl 匹配不同文件的列,perl,Perl,我有这样一种情况:我有一个类似file1的文件 文件1 第二个文件如下所示: 文件2 我想要以下输出: 文件3 List Count NM_00012 Gene1 NM_00013 Gene2 NM_00021 Gene3 NM_000254 Gene4 NM_000756 Gene5 有人能帮我吗? 我对Perl一无所知 提前谢谢 您可以选择(未经测试): my(%has
List Count
NM_00012 Gene1
NM_00013 Gene2
NM_00021 Gene3
NM_000254 Gene4
NM_000756 Gene5
有人能帮我吗?
我对Perl一无所知
提前谢谢 您可以选择(未经测试):
my(%hash1,%hash2,$list,$count,$ID);
OpenF,“好吧,有一个简单明了的实现:
open FILE1, "file1.txt";
open FILE2, "file2.txt";
open OUTPUT, ">", "output.txt";
my (%file1content, %file2content);
%file1content = ProcessFile(\*FILE1);
%file2content = ProcessFile(\*FILE2);
sub ProcessFile {
my (%ret, @arr);
my $fh = shift;
while (@arr = split(/[\s\t]+/,<$fh>)) {
next unless(scalar(@arr) == 2);
next unless(($arr[0]+0) > 0);
$ret{$arr[0]} = $arr[1];
}
return %ret;
}
foreach my $key (sort {$a cmp $b} keys %file1content){
print OUTPUT $file1content{$key},"\t",$file2content{$key},"\n";
}
close (OUTPUT);
close (FILE1);
close (FILE2);
打开FILE1,“FILE1.txt”;
打开文件2,“FILE2.txt”;
打开输出“>”,“OUTPUT.txt”;
我的(%File1内容,%File2内容);
%file1content=ProcessFile(\*FILE1);
%file2content=ProcessFile(\*FILE2);
子进程文件{
我的(%ret,@arr);
我的$fh=班次;
而(@arr=split(/[\s\t]+/,){
下一个除非(标量(@arr)==2);
下一个除非($arr[0]+0)>0);
$ret{$arr[0]}=$arr[1];
}
返回%ret;
}
foreach my$键(排序{$a cmp$b}键%file1content){
打印输出$file1content{$key},“\t”、$file2content{$key},“\n”;
}
关闭(输出);
关闭(文件1);
关闭(文件2);
Stack Overflow旨在帮助那些已经尽了最大努力却找不到解决方案的程序员。您似乎根本没有付出任何努力。请展示您所做的尝试,并解释您的具体问题。如果您对Perl完全陌生,那么我建议您从教程开始。是的,我完全同意您的意见,但我必须解决此问题现在有问题了!我等不及了。那你需要雇佣一个程序员。这不是一个为freeok Borodin完成工作的地方!我很理解这一点。谢谢。非常感谢巴兹尔的帮助!
List Count
NM_00012 Gene1
NM_00013 Gene2
NM_00021 Gene3
NM_000254 Gene4
NM_000756 Gene5
my (%hash1, %hash2, $list, $count, $ID);
open F,"<","file2.txt" or die;
while(<F>) {
chomp;
($list,$count) = split/\s+/;
$hash1{$list} = $count;
}
close F;
open F,"<","file1.txt" or die;
while(<F>) {
chomp;
($list,$ID) = split/\s+/;
if(! exits $hash2{$ID}) {
print "$ID $hash1{$list}";
$hash2{$ID} = 1;
}
}
close F;
open FILE1, "file1.txt";
open FILE2, "file2.txt";
open OUTPUT, ">", "output.txt";
my (%file1content, %file2content);
%file1content = ProcessFile(\*FILE1);
%file2content = ProcessFile(\*FILE2);
sub ProcessFile {
my (%ret, @arr);
my $fh = shift;
while (@arr = split(/[\s\t]+/,<$fh>)) {
next unless(scalar(@arr) == 2);
next unless(($arr[0]+0) > 0);
$ret{$arr[0]} = $arr[1];
}
return %ret;
}
foreach my $key (sort {$a cmp $b} keys %file1content){
print OUTPUT $file1content{$key},"\t",$file2content{$key},"\n";
}
close (OUTPUT);
close (FILE1);
close (FILE2);