次のデータを含む 2 つの csv ファイルがあります。
gt1/sd2 34 3
gt1/sd3 67 4
gt1/sd4 20 -9
データを含む2番目のcsvファイル:
gt1/sd2 9 6
gt1/sd5 10 8
gt1/sd9 21 10
ここで、各 csv の最初の列を比較して、それらが同じかどうかを確認し、両方の csv 列を 1 つの csv に出力します。
これらのファイルをハッシュに読み込んでみました。そして、私のコードは今このように見えます。キーが両方のハッシュで等しいことがわかったときに、出力 csv を書き込む方法に行き詰まっています。
my %hash1;
while (my $line = <file1> ) {
$line =~ s/\s*\z//;
my @array = split /,/, $line;
my $key = shift @array;
$hash1{$key} = \@array;
}
my %hash2;
while (my $line1 = <file2> ) {
$line1 =~ s/\s*\z//;
my @array1 = split /,/, $line1;
my $key1 = shift @array1;
$hash2{$key1} = \@array1;
}
while (my ($k,$v)=each %hash1){
for ( keys %hash1 ) {
unless ( !exists $hash2{$_} ) {
print "$_: found in second hash\n";
next;
}
print "$k $v\n"
}
}
この例では、出力 csv には次のものが必要です。
gt1/sd2 34 3 gt1/sd2 9 6
gt1/sd3 67 4 NotFound NotFound NotFound
gt1/sd4 20 -9 NotFound NotFound NotFound