2017-02-10 4 views
0

Я новичок в perl и считаю, что это трудно справиться с ситуацией ниже и концепцией хэша в perl. Я нашел некоторые материалы для работы с этим сценарием, но не имеет Text: CSV-модуль.Perl hash: печать колонок файлов на основе ключа другого файла

#/usr/bin/perl -w 
use strict; 
use warning; 
use Data::Dumper; 

my $INFILE_01 = "FILE_01.txt"; 
my $INFILE_02 = "FILE_02.txt"; 

open INFILE02, "< $INFILE_02" or die "$0 : Failed to open input file $INFILE_02 : $! \n"; 
# Format of INFILE02 - Tab Delimited 
DEVELOMENT_TEST BUGID_TS57 TestID 
DEVELOMENT_UAT BUGID_TS57 TestID 
DEVELOMENT_PROD BUGID_TS57 TestID 
DEVELOMENT_REG BUGID_TS57 TestID 
DEVELOMENT_TEST BUGID_TS57 TestID 
DEVELOMENT_TEST BUGID_TS57 TestID 
DEVELOMENT_UAT BUGID_TS57 TestID 
my %INFILE02; 

while (my $line = <INFILE02>) { 
    # Skipping if the line is empty or a comment 
    next if ($line =~ /^\s*$/); 
    next if ($line =~ /^#\s*/); 
    chomo $line; 

    if ($line = ~ /MOBILE_DEV/) { 
     my ($colum1, $column2, undef) = split /\t/, $line; 
     $INFILE02{$colum1} = $colum2; 
    } 

} 
close $INFILE02 or die "$0 : Failed to close input file $INFILE02 : $! \n"; 
print Dumper \%INFILE02; 

# Output of %INFILE02 
$VAR1 = { 
     'DEVELOMENT_TEST' => 'BUGID_TS57', 
     'DEVELOMENT_UAT' => 'BUGID_TS57', 
     'DEVELOMENT_PROD' => 'BUGID_TS57', 
     'DEVELOMENT_REG' => 'BUGID_TS57' 
} 

Теперь сверху хэш-вывода INFILE02 мне нужно, чтобы соответствовать ключи DEVELOMENT_TEST, DEVELOMENT_UAT, DEVELOMENT_PROD, DEVELOMENT_REG Файл INFILE01 на каждой строке по одному.

для Ex, если ключ DEVELOMENT_TEST присутствует в любой строке INFILE01, затем распечатайте столбец 1, столбец 3 INFILE01 и все столбцы INFILE02 в выходном файле.

Мне нужно повторить это для всех ключей% INFILE02.

#Format of INFILE001 - Tab Delimited 
119736 PRODUCTTESTING DEVELOMENT_TEST 
448094 PRODUCTTESTING DEVELOMENT_TEST 
206893 PRODUCTTESTING DEVELOMENT_TEST 
333743 PRODUCTTESTING DEVELOMENT_TEST 
172534 PRODUCTTESTING DEVELOMENT_PROD 
785275 PRODUCTTESTING DEVELOMENT_PROD 
995932 PRODUCTTESTING DEVELOMENT_PROD 
223488 PRODUCTTESTING DEVELOMENT_TEST 
433512 PRODUCTTESTING DEVELOMENT_TEST 
640802 PRODUCTTESTING DEVELOMENT_PROD 
403866 PRODUCTTESTING DEVELOMENT_UAT 
828788 PRODUCTTESTING DEVELOMENT_UAT 
751490 PRODUCTTESTING DEVELOMENT_UAT 
972562 PRODUCTTESTING DEVELOMENT_UAT 
367541 PRODUCTTESTING DEVELOMENT_REG 
481360 PRODUCTTESTING DEVELOMENT_REG 
920232 PRODUCTTESTING DEVELOMENT_UAT 

Желаемый результат должен быть, как показано ниже:

119736 DEVELOMENT_TEST BUGID_TS57 TestID 
448094 DEVELOMENT_TEST BUGID_TS57 TestID 
206893 DEVELOMENT_TEST BUGID_TS57 TestID 
333743 DEVELOMENT_TEST BUGID_TS57 TestID 
223488 DEVELOMENT_TEST BUGID_TS57 TestID 
433512 DEVELOMENT_TEST BUGID_TS57 TestID 
172534 DEVELOMENT_PROD BUGID_TS57 TestID 
785275 DEVELOMENT_PROD BUGID_TS57 TestID 
995932 DEVELOMENT_PROD BUGID_TS57 TestID 
640802 DEVELOMENT_PROD BUGID_TS57 TestID 
403866 DEVELOMENT_UAT BUGID_TS57 TestID 
828788 DEVELOMENT_UAT BUGID_TS57 TestID 
751490 DEVELOMENT_UAT BUGID_TS57 TestID 
972562 DEVELOMENT_UAT BUGID_TS57 TestID 
920232 DEVELOMENT_UAT BUGID_TS57 TestID 
367541 DEVELOMENT_REG BUGID_TS57 TestID 
481360 DEVELOMENT_REG BUGID_TS57 TestID 

Пожалуйста, советы по же. Заранее спасибо.

+0

Я не получаю понятие сравнения ключи к значениям другого файла. – LittleMagnolia

+1

Пожалуйста, отредактируйте ваш вопрос, чтобы быть более понятным. Код не имеет никакого отношения к вашим данным, например, я не вижу нигде в данных жестко закодированной строки 'MOBILE_DEV'. Кроме того, 'chomo' должен быть' chomp'. и т. д. – jm666

ответ

0

Что-то, как показано ниже, где первый аргумент является файл один, и второй аргумент файла два:

#!/usr/bin/perl 

use strict; 

my %hash=undef; 
open(my $fh,$ARGV[0]); 
while (<$fh>) { 
    my @fields=split(/\s+/); 
    $hash{$fields[0]}=1; 
} 
close($fh); 

open(my $fh,$ARGV[1]); 
while (<$fh>) { 
    for my $key (keys %hash) { 
     if ($key && /$key/) { 
      print "$_"; 
     } 
    } 
} 
close($fh); 
+1

Я уверен, что 'my% hash = undef' не делает то, что вы думаете. Добавление «использования предупреждений» в код показало бы вам проблему. –