Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 匹配不同文件的列_Perl - Fatal编程技术网

Perl 匹配不同文件的列

Perl 匹配不同文件的列,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

我有这样一种情况:我有一个类似file1的文件

文件1

第二个文件如下所示:

文件2

我想要以下输出:

文件3

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);