Perl脚本修改一个文件从第二个文件中获取值

Perl script to modify one file taking values from second file

我编写了一个处理两个文件的 Perl 脚本,文件 1 包含一些文本,其中 'ABC' 需要替换为第二个文本文件中存在的值列表。

File1.txt :

Name     -> ABC

Record   -> Exists

Presence -> Existing_ABC

File2.txt :

John

Claude

Kepler

Shane

Austin

我想用 John 替换 File1 中的 'ABC' 然后应该再次获取原始 File1 并且 'ABC' 应该用 Claude 替换并与第一次迭代合并,以此类推直到 File2 的最后一个条目。 因此,目前该脚本只给出一个值的输出 'John' 它不会从列表中获取其他值。

最终 Output.txt 文件应如下所示:

Name     -> John

Record   -> Exists

Presence -> Existing_John


Name     -> Claude

Record   -> Exists

Presence -> Existing_Claude

.

.

.

.
.


(#till Austin)

请找出我脚本中的错误并提前致谢:->

#!/usr/bin/perl

use strict;

use warnings;

my @blockList   =  load_block_list();

my $rules_file  =  'File1.txt';

my $out_file    =  'out.txt';  

open( my $rules,  '<',  $rules_file  );

open( my $out,    '>',  $out_file  );

my $Orig_line;

my $new_line;

my $key;


foreach my $Element (@blockList) {

    while($Orig_line=<$rules>) {

        chomp($Orig_line);

        $new_line = $Orig_line;

        if($Orig_line =~ m/ABC/) {
            $new_line =~ s/ABC/$Element/;
        }

        print {$out} "$new_line\n";

    }
}

sub load_block_list
{
    my $block_list = "File2.txt";

    open(DAT, $block_list) || die("Could not open file $block_list!");
    my @lines=<DAT>;
    close(DAT);

    my @retVal = ();
    foreach my $line (@lines) {
        $line =~ s/[\r\n]+//g;
        push(@retVal,$line),
    }
    return @retVal;
}

您应该在遍历 @blockList 之前阅读 File1.txt。 像这样:

...
my @template = load_template(); 
my @blockList = load_block_list();
...
foreach my $Element (@blockList) {
    foreach my $Orig_line (@template) {
...

load_template 应该类似于 load_block_list.