0

あるファイル (file1) の列 (col1) の値を、別のファイル (file2) の列 (col1) のすべてのレコードと比較したいと考えています。私の戦略は、ファイルの各行をタブ区切り文字で分割してファイルを読み取り、2 つの列の値を比較することでした。一致する場合は、2 番目のファイルの列から特定の値を出力し、それを最初のファイルの最後の列に追加します。それ以外の場合は、「見つかりません」と出力し、最初のファイルの最後の列に追加します。次のスクリプトは、フィールド内のすべての行と行を比較するのではなく、行ごとに比較し、エラーを返していると思います (初期化されていない値 $col1[0] の使用...)。あなたの親切な助けに感謝します。

open (FILE1, "<", "file1") or die ("Can't open file $!");
open (FILE2, "<", "file2") or die  ("Can't open file $!");
my @data1 = <FILE1>;
my @data2 = <FILE2>;
foreach my $curr_line_1 ( @data1 ) {
    my @col1 = split "\t", $curr_line_1;
    }
foreach my $curr_line_2 ( @data2 ) {
    my @col2 = split "\t", $curr_line_2;
    }
            if ("$col1[0]" eq "$col2[0]") {
                open FINAL, '>>', 'final';
                push(@col1, "$col2[1]");
                print FINAL "@col1\n";
                }
            else {
                open FINAL, '>>', 'final';
                push(@col1, "not found");
                print FINAL "@col1\n";
                }
close(FINAL);
close(FILE1);
close(FILE2);

file1    
1  mary
1  tom
2  john
3  will
4  hugh
5  eddy

file2
2  unit2
3  unitA
5  base

final
1  mary  not found
1  tom   not found
2  john  unit2
3  will  unitA
4  hugh  not found
5  eddy  base
4

1 に答える 1