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

时间:2019-03-14 14:10:36

标签: perl file-handling

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

File1.txt:

Name     -> ABC

Record   -> Exists

Presence -> Existing_ABC

File2.txt:

John

Claude

Kepler

Shane

Austin

我想用John替换File1中的“ ABC”,然后再次使用原始File1,并且应该用Claude替换“ ABC”,并与第一次迭代合并,以此类推,直到最后一次输入文件2。 因此,目前该脚本仅提供一个值“ 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;
}

1 个答案:

答案 0 :(得分:0)

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

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

load_template应该类似于load_block_list