2013-07-17 28 views
2

我有两个文件,我已读入2个单独的散列。第一个文件有两列,看起来像:如何比较两个散列

123456789 11111 
234567891 22222 
345678912 33333 

第二个文件有一列,它看起来像:

123456789 
010124561 
100324531 

我想两个散列比较和无论何时,只要之间的匹配这两个文件的第一列,它应该打印到第一列结果的新文件。这是我迄今为止...

#!/usr/bin/perl 

use Sys::Hostname; 
use lib "$ENV{HOME}/common/lib/perl"; 
use strict; 
use warnings; 

my %oid; 
my %oid2; 
my %atom; 
my %newline; 
my $oid; 
my $atom; 
my @line =(); 
my @line2 =(); 
my @oid =(); 
my @oid2 =(); 

my $input = 'file.txt'; 
my $input2 = 'file2.txt'; 
my $output = 'outputfile.txt'; 

open (IN, "<$input"); 
open (IN2, "<$input2"); 
open (OUT, "+>$output"); 

for my $line (<IN>) { 
    chomp $line; 
    my @line = split /\t/, $line; 
    push(@oid, $line[0]); 
    $oid{ $line[0] } = $line[0]; 
    $atom{ $line[0] } = $line[1]; 
} 

for my $line2 (<IN2>) { 
    chomp $line2; 
    my @line2 = split /\t/, $line2; 
    push(@oid2, $line2[0]); 
    $oid2{ $line2[0] } = $line2[0]; 
} 
+0

哇。很多perl程序的代码...你不能像'foreach $ key @keys(%hash1){if(exists $ hash2($ key)){{做任何你想做的事}}'做类似的事情吗? – user2141046

回答

1

方式一:

#!/usr/bin/perl 
use strict; 
use warnings; 
use Data::Dumper; 
$\="\n"; 

open my $fh1, '<', 'f1' or die $!; 
open my $fh2, '<', 'f2' or die $!; 
my %h1; 
while (<$fh1>){ 
     chomp; 
     my ($x,$y)=split; 
     $h1{$x}=$y; 
} 

while(<$fh2>){ 
     chomp; 
     print if exists $h1{$_}; 
} 
+0

我似乎没有收到任何结果@guru。我知道这两个文件都绝对匹配。 – user2320229

2

太多的代码。了解你的Unix工具箱!

comm -12 <(cut -d' ' -f1 file1|sort) <(sort file2)