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
.
我编写了一个处理两个文件的 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
.