Ваш critera объединения немного сбивает с толку file2.col2 не имеет ничего общего с file1.col2 или file1.col3 ... Вы имели в виду file2.col3?И у вас нет образца вывода, поэтому мы точно знаем, что вы ищете.
Но я думаю, что это сработает.Он использует вышеупомянутый модуль DBD :: CSV для чтения ваших файлов tsv и присоединения к ним, а также DBIx :: TSV для форматирования вывода.Оба доступны через ваш любимый клиент CPAN.
#!/usr/bin/perl
use warnings;
use strict;
use DBI;
use DBIx::TSV;
my $dbh = DBI->connect("dbi:CSV:", undef, undef,
{csv_tables => {
"file1" => { f_file => "file1.tsv" },
"file2" => { f_file => "file2.tsv" }
},
csv_sep_char => "\t"
}) or die $DBI::errstr;
print $dbh->selectall_tsv(<<EOQ);
SELECT f1.col2 AS Col1, f1.col3 AS Col2, f1.col4 AS Col3, f2.col4 AS Col4, f2.col5 AS Col5
FROM file1 AS f1
, file2 AS f2
WHERE f1.col2 = f2.col1 OR f1.col2 = f2.col3 OR f1.col3 = f2.col1 OR f1.col3 = f2.col3
EOQ
$dbh->disconnect;
, который печатает
Col1 Col2 Col3 Col4 Col5
NH1 NH1 Unknown Unknown 1
NH2 NH2 Unknown Unknown 1
BU51 BU51 Unknown Unknown 1
BU52 BU52 Unknown Unknown 1
(SO форматирование не очень хорошо работает с вкладками)
Есть и другие способыЯ уверен, что делать это, но когда вы начинаете говорить о соединении строк разных файлов на основе общих полей, а затем только отображать определенные поля ... это просто кричит реляционные данные, а SQL - мой обычный способ обработки, даже безфактическая база данных.