暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Perl实例---批量替换内容

EasyPerl 2021-07-30
473

我们在数据处理的时候, 有时候需要对原始的数据的部分内容进行替换, 有时候又同时有多个替换规则,那么我们需要如何来进行批量的处理呢?


我们还是通过下面的例子来看:


我们有一个原始数据文件data.txt,它的内容如下:


ACGGGCCAGGATTTCAAA


同时我们有一个替换规则的文件rule.txt, 它的内容如下:

A   a

T   t

G  g

C  c


我们来看如何处理:


读取文件

my $file = 'data.txt';

open my $fh, '<', $file or die "failed to open file:$file\n";


my $file2 = 'rule.txt';

open my $fh2, '<', $file2 or die "failed to open file:$file2\n";


我们先将所有规则读入hash

my %rules;

while(<$fh2>){

chomp;

my ($origin, $new) = split /\s+/;

next unless defined $new;

$rules{$origin} = $new;

}

close $fh2;


while(<$fh>){

        我们以此执行所有的规则, 来进行正则替换

for my $origin(keys %rules){

s/$origin/$rules{$origin}/g;

}

print $_;

}

close $fh;


这里我们需要特别注意的是, 如果我们的规则里面有冲突的规则,或者我们需要按照顺序来执行这些规则, 那么我们就不能单独使用hash了。 

我们需要做的变动就是, 同时使用一个数组来存储所有的hash的key, 最后进行直接规则的时候, 按照数组的顺序来执行。


比如, 我们有如下规则时, 就一定要当心了:

a  c

c  b 


文章转载自EasyPerl,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论