私は、2つのタブ区切りファイルで列間の一致を探すためにperlスクリプトを使用しています。しかし、1つの列については、2つの列の2つの文字列の部分一致を探したいだけです。perlは2つのファイルの文字列の一部と一致します
$ table2の$ row [4]と$ table1の$ row {d}です。 $ table2の$ row [4]の値は、 'xxxx'のようになります。 $ table1の$ row {d}の値は、 'xxxx.aaa'のようになります。
「。」の前の部分が同じです、一致があります。一致しない場合、一致するものはありません。私はこのスクリプトをスクリプトに実装する方法がわかりません。これは私がこれまで持っていたものです。私は、異なる列間の完全一致を探すだけです。 「...」あなたは、アレイ@row
とあなたのハッシュ%row
の両方が完全に異なるスコープに存在するため、スコープの問題を抱えているとしているこの質問
#! /usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
local $Data::Dumper::Useqq = 1;
use Getopt::Long qw(GetOptions);
...
...
chomp(my @header_table2 = split /\t/, <$table2>);
my %lookup;
while(<$table2>){
chomp;
my @row = split(/\t/);
$lookup{ $row[0] }{ $row[1] }{ $row[4] }{ $row[5] }{ $row[6] }{ $row[7] }{ $row[8] } = [ $row[9], $row[10] ];
}
my @header = do {
my $header = <$table1>;
$header =~ s/\t?\n\z//;
split /\t/, $header;
};
print $table3 join ("\t", @header, qw/ name1 name2 /), "\n";
{
no warnings 'uninitialized';
while(<$table1>){
s/\t?\n\z//;
my %row;
@row{@header} = split /\t/;
print $table3 join ("\t", @row{@header},
@{ $lookup{ $row{a} }{ $row{b} }{ $row{c} }{ $row{d} }{ $row{e} }{ $row{f} }{ $row{g} }
// [ "", "" ] }), "\n";
}
}
私は、あなたがやろうとしているが、私の$表1は、約50の列が含まれていますかを理解ので、@ {$検索{$行{A} {$ row {b}} {$ row {c}} {$ row {d}} {$ row {e}} {$ row {f}} {$ row {g}}は実際には列(最初の行)。だから私はあなたのソリューションはこの場合に動作するとは思わない。 – user1987607
@ user1987607:疑いの余地はありません。私のコードを試しましたか?あなたの本当のデータを表示しない限り、私は本当にさらに助けることができません。 – Borodin
なぜ私が疑う理由は、table1に9列が含まれていますが、表2には50個の列( 'a'〜 'g'だけではない)が含まれているため、table1の9列と、 a '、' b '、' c '、' d '、' e '、...は、この表の最初の9列だけではありません。 – user1987607