比较两个文件并使用perl从第一个文件写入匹配数据

时间:2018-10-25 00:43:14

标签: perl

第一个文件

名字:姓氏:位置:国家/地区:ID

FirstName1:LastName1:Location1:Country1:ID1

FirstName2:LastName2:Location2:Country2:ID2

FirstName3:LastName3:Location3:Country3:ID3

FirstName4:LastName4:Location4:Country4:ID4

第二个文件

名字:姓氏:位置:国家/地区:旧ID

FirstName2:LastName2:Location2:Country2:Old_ID2

FirstName4:LastName4:Location4:Country4:Old_ID4

必须比较第一文件和第二文件,并用第一文件中具有新ID的数据打印匹配行。

下面的脚本从第二个文件中获取我的Old_ID,而不从第一个文件中获取新的

void AddPerson()

输出:

名字:姓氏:位置:国家/地区:旧ID

FirstName2:LastName2:Location2:Country2:Old_ID2

FirstName4:LastName4:Location4:Country4:Old_ID4

预期输出:

名字:姓氏:位置:国家/地区:ID

FirstName2:LastName2:Location2:Country2:ID2

FirstName4:LastName4:Location4:Country4:ID4

1 个答案:

答案 0 :(得分:0)

只需尝试以下方式:

use strict; # Use strict Pragma
use warnings;

my ($file1, $filecnt1, $file2, $filecnt2) = ""; #Declaring variables 

$file1 = "a1.txt"; $file2 = "b1.txt";  #Sample files

readFileinString($file1, \$filecnt1); # Reading first file
readFileinString($file2, \$filecnt2); # Reading second file

$filecnt2=~s/\:Old\_ID/\:ID/g;  # Replacing that difference content

my @firstfle = split "\n", $filecnt1;  # Move content to array variable to compare
my @secndfle = split "\n", $filecnt2;

my %firstfle = map { $_ => 1 } @firstfle; #Mapping the array into hash variable
my @scdcmp = grep { $firstfle{$_} } @secndfle;

print join "\n", @scdcmp;


#---------------> File reading
sub readFileinString
#--------------->
{
    my $File = shift;
    my $string = shift;
    open(FILE1, "<$File") or die "\nFailed Reading File: [$File]\n\tReason: $!";
    read(FILE1, $$string, -s $File, 0);
    close(FILE1);
}

#---------------> File Writing
sub writeFileinString
#--------------->
{
    my $File = shift;
    my $string = shift;
    my @cDir = split(/\\/, $File);
    my $tmp = "";
    for(my $i = 0; $i < $#cDir; $i++)
    {
        $tmp = $tmp . "$cDir[$i]\\";
        mkdir "$tmp";
    }
    if(-f $File){
        unlink($File);
    }
    open(FILE, ">$File") or die "\n\nFailed File Open for Writing: [$File]\n\nReason: $!\n";
    print FILE $$string;
    close(FILE);
}