如何比较两个哈希值

时间:2013-07-17 13:03:34

标签: perl hash

我有两个文件,我已经阅读了两个单独的哈希值。第一个文件有两列,如下所示:

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];
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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{$_};
}