2013-07-17 27 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)