免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2244 | 回复: 4
打印 上一主题 下一主题

一个perl问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-06 18:24 |只看该作者 |倒序浏览
#!/usr/bin/perl -w
use strict;
our $WORK_PATH = $ARGV[0];

#my $dir = "d:\\test\\";

open(FILE_A,"$WORK_PATH/A.txt") || die;
my @in_a=<FILE_A>;
close(FILE_A);

open(FILE_B,"$WORK_PATH/B.txt") || die;
my @in_b=<FILE_B>;
close(FILE_b);

open my $out , ">$WORK_PATH/C.txt" or die;

foreach my $tmpb (@in_b)
{
chomp($tmpb);
our $tmpb1 = substr($tmpb,rindex($tmpb,':')+1);
print "$tmpb1","\n";
our $tmpb2 = substr($tmpb,0,rindex($tmpb,':'));
print "$tmpb2","\n";

foreach (@in_a)
{
         chomp;
         print "$tmpb2\n";
     print "$tmpb1\n";
     my $temp =~ s/$tmpb2/$tmpb1/;
         print "$temp\n";
         print $out "$temp\n";
}
last;
}

A文件:
10.1.1.1 xxxxxxxx
10.1.1.2 xxxxxxxx
10.1.1.3 zzzzzzzz
10.1.1.4 xxxxxxxx
10.1.1.5 xxxxxxxx
10.1.1.6 xxxxxxxx
10.1.1.7 yyyyyyyy
10.1.1.8 xxxxxxxx
10.1.1.9 yyyyyyyy
10.1.1.10 yyyyyyy

B:
xxxxxxxx:你欠水费
yyyyyyyy:你欠电费
zzzzzzzz:你欠气费

现在要把xxxxxxxx yyyyyyyy  zzzzzzzz 替换成响应的文字。 s/$tmpb2/$tmpb1/ 怎么不起效?

论坛徽章:
0
2 [报告]
发表于 2011-07-06 19:01 |只看该作者
把这几行:
my $temp =~ s/$tmpb2/$tmpb1/;
print "$temp\n";
print $out "$temp\n";

改成:
s/$tmpb2/$tmpb1/;
print "$_\n";
print $out "$_\n";

但是,你的程序有逻辑问题,这个请LZ自己解决。

另外,类似的问题应该用HASH解决,而不是匹配。

论坛徽章:
0
3 [报告]
发表于 2011-07-06 19:02 |只看该作者
把这几行:
my $temp =~ s/$tmpb2/$tmpb1/;
print "$temp\n";
print $out "$temp\n";

改成:
s/$tmpb2/$tmpb1/;
print "$_\n";
print $out "$_\n";

但是,你的程序有逻辑问题,这个请LZ自己解决。

另外,类似的问题应该用HASH解决,而不是匹配。

论坛徽章:
0
4 [报告]
发表于 2011-07-06 19:13 |只看该作者
LZ应该希望写下面的代码:
  1. #!/usr/bin/perl

  2. use strict;
  3. #our $WORK_PATH = $ARGV[0];

  4. my $WORK_PATH = "d:/t";

  5. open(FILE_A,"$WORK_PATH/A.txt") || die;
  6. my @in_a=<FILE_A>;
  7. close(FILE_A);

  8. open(FILE_B,"$WORK_PATH/B.txt") || die;
  9. my @in_b=<FILE_B>;
  10. close(FILE_b);

  11. my %hash;
  12. foreach (@in_b) {
  13.          chomp;
  14.          my ($key,$value) = split /:/;
  15.          $hash{$key} = $value;
  16. }

  17. open my $out , ">$WORK_PATH/C.txt" or die;
  18. foreach (@in_a) {
  19.         chomp;
  20.         my ($ip,$key) = split /\s+/;
  21.         print "$ip $hash{$key}\n";
  22.         print $out "$ip $hash{$key}\n";
  23. }
  24. close $out;
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2011-07-07 02:48 |只看该作者
  1.     #!/usr/bin/perl

  2.     use strict;
  3.     my %arr_B;

  4.     open(a,"A")|| die;
  5.     open(b,"B")|| die;
  6.     while (<b>) {
  7.             chomp;
  8.             if(m/([^:]+):(.*)/){
  9.                                 $arr_B{$1}=$2
  10.                         }
  11.     }
  12.     while (<a>){
  13.             chomp;
  14.             if(m/([^\s]+)\s+(.*)/){
  15.                     print $1,"\t",$arr_B{$2},"\n";
  16.             }
  17.     }
  18.     close(a);
  19.     close(b);
  20.        
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP