大侠请留步!!!linux下perl操作字符串问题。
需求:
检测冒号前面的字符串,若有相同的则依次改为字符串_1、字符串_2 ....
每一行的顺序不变。结果输出到目标文件里。
如:
文件test.txt:
aa:1233444
bb:1212123123
cc:dasfasdfsdf
aa:sfssdfsdfsd
ddfasdfasdf
dd:dasdf
bb:sd
aa:asfasfdsd
执行结果:
文件data.txt:
aa:1233444
bb:1212123123
cc:dasfasdfsdf
aa_1:sfssdfsdfsd
ddfasdfasdf
dd:dasdf
bb_1:sd
aa_2:asfasfdsd
[解决办法]
#!/usr/bin/perl%words;open $rd, '<', 'test.txt' or die $!;open $wt, '>', 'data.txt' or die $!;while (<$rd>) { ($k) = split /:/; if ($words{$k}) { s{^($k)}{$1_$words{$1}}; } print $wt "$_"; $words{$k} += 1;}close $wt or die $!;close $rd or die $!;
[解决办法]
#!/usr/bin/perl -wmy $pat = "^(\\w+):";my %words;while (<>) { if (/$pat/) { if ($words{$1}) { s/$pat/$1_$words{$1}/; } $words{$1}++; } print;}