#!/usr/bin/env perl -l use strict; use warnings; use autodie; use Text::CSV; my $ref_file = 'pm_1079751_reference.csv'; my @gen_files = qw{pm_1079751_source1.gen pm_1079751_source2.gen}; my $allele_sep = '-'; my %ref_data; my $ref_csv = Text::CSV::->new; open my $ref_fh, '<', $ref_file; while (my $row = $ref_csv->getline($ref_fh)) { $ref_data{$row->[0]} = join $allele_sep, @$row[1,2]; } close $ref_fh; for my $gen_file (@gen_files) { my $gen_csv = Text::CSV::->new({allow_whitespace => 1}); open my $gen_fh, '<', $gen_file; while (my $row = $gen_csv->getline($gen_fh)) { next unless exists $ref_data{$row->[2]}; if ($ref_data{$row->[2]} eq join $allele_sep, @$row[3,4]) { print join(',' => @$row[2,3,4]), "\n\tfound in '$gen_file':\n\t\t", join ', ' => @$row; } } close $gen_fh; } #### $ cat pm_1079751_reference.csv 34787638,A,C 34787800,A,G #### $ cat pm_1079751_source1.gen C1, M1, 99999999, A, C, ... source1 info ... C1, M2, 34787638, A, G, ... source1 info ... C1, M3, 34787800, A, C, ... source1 info ... C1, M4, 34787800, A, G, ... source1 info ... #### $ cat pm_1079751_source2.gen C1, M1, 99999999, A, C, ... source2 info ... C1, M2, 34787638, A, G, ... source2 info ... C1, M4, 34787800, A, G, ... source2 info ... C1, M3, 34787638, A, C, ... source2 info ... #### 34787800,A,G found in 'pm_1079751_source1.gen': C1, M4, 34787800, A, G, ... source1 info ... 34787800,A,G found in 'pm_1079751_source2.gen': C1, M4, 34787800, A, G, ... source2 info ... 34787638,A,C found in 'pm_1079751_source2.gen': C1, M3, 34787638, A, C, ... source2 info ...