2012-05-30 6 views
0

두 개의 파일이 있습니다. 하나의 파일에는 키만 포함되고 다른 파일에는 키와 값이 모두 있습니다. 한 파일의 키를 다른 파일의 키와 어떻게 비교할 수 있습니까? 여기한 파일의 해시 키와 perl의 다른 해시 값을 비교하는 방법

example of file1 
    steve 
    robert 
    sandy 
    alex 

    example of file2 
    age25, steve 
    age29, alex 
    age30, mindy 
    age50, rokuna 
    age25, steve 

    example of output 
    age25, steve 
    age29, alex 

난 당신이 첫 번째 파일에서 한 줄과 두 번째 줄에서 한 줄을 읽고 지금까지

my $age_name="file1.txt"; 
    my $name="file2.txt"; 
    open my $MYFILE, "<", $name or die "could not open $name \n"; 
    open my $MYFILE2, "<", $age_name or die "could not open $age_name \n"; 
    while(<$MYFILE>) { 
    my ($key, $value) = split(","); 
    my $secondfile = <$MYFILE2>; 

    if (defined $secondfile) { 
     my ($key2, $value2) = split(","); 
     if ($value2=~m/$key/) { 
     print "$key2 - $value2 \n"; 
     } 
    } 

    } 
    close $MYFILE; 
    close $MYFILE2; 

답변

2

을 것입니다. 문제는 라인들이 관련 될 필요가 없다는 것입니다. 고전적인 해결책은 하나의 파일을 해시로 읽은 다음 두 번째 파일을 읽는 동안 검색을 위해 해시를 사용하는 것입니다.

#!/usr/bin/perl 
use strict; 
use warnings; 

my %age_of; 
open my $AGE, '<', 'file2.txt' or die $!; 
while (<$AGE>) { 
    chomp; 
    my ($age, $name) = split /, /; 
    $age_of{$name} = $age; 
} 

open my $NAME, '<', 'file1.txt' or die $!; 
while (<$NAME>) { 
    chomp; 
    print "$age_of{$_}, $_\n" if exists $age_of{$_}; 
} 
+0

안녕하세요. 나는 지금 그립을 얻고있다 :) – Maxyie

관련 문제