文件.txt
bolt W X Y Z
blake X Y Z
gatlin A B C
powell X Y Z
carl P Q R
格式.txt
blake X Y Z
gatlin B C
carl P Q R
输出.txt
bolt W X Y Z
blake X Y Z
gatlin B C
powell X Y Z
carl P Q R
嘿嗨,我是 perl 新手,我有一个问题。我有 2 个文件,即 FILE.txt 和 FORMAT.txt。我想要 FILE.txt 形式的输出数据,但我想用 FILE.txt 替换数据两个文件共有的 FORMAT.txt 的数据,即与 blake 、 gatlin 和 carl 的行必须在 FILE.txt 中用从 FORMAT.txt 获得的数据替换。所需的输出如 OUTPUT.txt 中所示。我尝试通过查找两个文件之间的差异和共同点来做到这一点。
这是我的代码
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 is FINAL.txt
最终的.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
但是我期望输出的顺序如 OUTPUT.txt 而不是 FINAL.txt 中所示的任何人都可以帮我解决这个问题吗?