我编写了一个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;
}
答案 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
。