1、采用perl更新文件关键字
New_age.sdc和all_age.sdc中包含人名和对应的年龄,使用new_age.sdc中的年龄更新all_age.sdc中的年龄信息。如xiaoming 年龄需要更新到44,zhangsan年龄更新到28
2、perl脚本如何实现
脚本实现原理如下:
- 打开已有的文件new_age.sdc
- 逐行匹配,关键字匹配,是否包含name + age,保存为name和new_age。如果包含,打开all_age.sdc,逐行匹配name,如果匹配上,则将new_age替换old_age.否则保持不变。将替换结果保存在line_save里,保存到tmp_file。
- 一次内部循环后,将tmp_file move为output
- 所有循环完成后输出output
3、perl脚本如何使用
使用命令:perl perl006_keyword_replace.pl -input1 new_age.sdc -input2 all_age.sdc
原文件: all_age.sdc和new_age.sdc
生成的新文件:all_age_replace.sdc
xiaoming和wanger 年龄替换成功:
#!/usr/bin/perl -w
#use strict ;
my $input1;
my $input2;
my $output;
my $line ;
my $line2 ;
my $name ;
my $new_age;
my $old_age;
my $tmp_file ='tmp_file';
my $replace_cnt =0;
my $line_save ;
use Getopt::Long ;
Getopt::Long::GetOptions(
'input1=s' => \$input1 ,
'input2=s' => \$input2
);
if($input2 =~/(.*).sdc/){
$output =$1."_replace.sdc" ;
}else {
print "The $input2 name is Error, should be name.async.sdc\n";
}
system "cp $input2 $output" ;
open INPUT,'<', $input1 or die "Can't open $input1:$!";
while($line =<INPUT>) {
chomp $line ;
if($line =~/(\w*)\s*(\d\d)/){
$name = $1 ;
$new_age = $2;
$line_save ="";
print $name."\n" ;
print $new_age."\n";
open OUTPUT,'<', $output or die "Can't open $output:$!";
open TMP_OUTPUT,'>', $tmp_file or die "Can't open $tmp_file:$!";
while ($line2=<OUTPUT>) {
#chmod $line2;
if($line2=~/(\w*)\s*(\d\d)/) {
$old_age = $2 ;
#print "all_file : name : $1\n";
if("$name" eq "$1") {
$line2 =~ s/$old_age/$new_age/e;
#$line_save .=$line2."\n" ;
$line_save .=$line2 ;
$replace_cnt = $replace_cnt + 1;
print "all_file : name : $name\n";
}else {
#$line_save .=$line2."\n" ;
$line_save .=$line2 ;
}
}else {
#$line_save .=$line2."\n" ;
$line_save .=$line2;
}
}
print TMP_OUTPUT $line_save ;
close TMP_OUTPUT ;
close OUTPUT ;
#system "chmod 777 $output" ;
system "mv $tmp_file $output ";
}else {next ;}
}
print $replace_cnt ;
print "\n"."Please to check the new file :$output !! \n" ;