ファイル.txt
bolt W X Y Z
blake X Y Z
gatlin A B C
powell X Y Z
carl P Q R
FORMAT.txt
blake X Y Z
gatlin B C
carl P Q R
OUTPUT.txt
bolt W X Y Z
blake X Y Z
gatlin B C
powell X Y Z
carl P Q R
こんにちは。perl を初めて使用するので質問があります。FILE.txt と FORMAT.txt という 2 つのファイルがあります。出力データを FILE.txt の形式にしたいのですが、FILE.txt のデータを両方のファイルに共通の FORMAT.txt のデータ、つまり blake 、 gatlin 、および carl の行は、FILE.txt で FORMAT.txt から取得したデータに置き換える必要があります。必要な出力は、OUTPUT.txt に示されているとおりです。2つのファイルの違いと共通点を見つけて、これを試みました。
これは私のコードです
my %results = ();
open FILE1, "< FILE.txt" or die "Could not open file: $! \n";
while(my $line = < FILE1>)
{
$results{$line}=1;
}
close(FILE1);
open FILE2, "<FORMAT.txt" or die "Could not open file: $! \n";
while(my $line =< FILE2>)
{
$results{$line}++;
}
close(FILE2);
open (OUTFILE1, ">>common.txt") or die "Cannot open $outfile for writing \n";
open (OUTFILE, ">>diff.txt") or die "Cannot open $outfile for writing \n";
foreach my $line (keys %results)
{
print OUTFILE $line if $results{$line} == 1;
print OUTFILE1 $line if $results{$line} > 1;
}
close OUTFILE;
close OUTFILE1;
このコードから、common.txt と diff.txt という 2 つのファイルを連結して出力を得ました。
FINAL.txt
bolt W X Y Z
powell X Y Z
gatlin B C
gatlin A B C
blake X Y Z
carl P Q R
しかし、FINAL.txtではなくOUTPUT.txtに示されているように、出力を期待している順序誰でもこれで私を助けてくれますか???