首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

运用perl实现多个文件合并

2013-01-21 
使用perl实现多个文件合并请教一下, 我现在要使用perl实现多个文件合并, 哪位高手能指点一下, 大体是这样

使用perl实现多个文件合并
请教一下, 我现在要使用perl实现多个文件合并, 哪位高手能指点一下, 大体是这样的:
比如a 文件 内容如下
a=11  b=http://www.baidu.com/1q2.XXXXX/XXX c=http://www.baidu.com/msoft/sec/tmp/baidu.apk

a=12  b=http://www.sina.com
/xxdxx/dsfds c=http://www.sina.com/msoft/sec/tmp/sina.apk

a=13  b=http://www.qq.com/sdfsdfsdf/sdfsdfs  c=http://www.qq.com/qq.akc

b 文件内容如下 
http://www.baidu.com/*,111
http://www.sina.com/*,112
c 文件内容如下
www.baidu.com,baidu.apk,123
www.sina.com,sina.apk,12223
结果
11,http://www.baidu.com/1q2.XXXXX/XXX,http://www.baidu.com/msoft/sec/tmp/baidu.apk,111,12312,http://www.sina.com//xxdxx/dsfds,http://www.sina.com/msoft/sec/tmp/sina.apk,112,1222313,http://www.qq.com/sdfsdfsdf/sdfsdfs,http://www.qq.com/msoft/sec/tmp/baidu.apk,,
希望有高手留下代码 ,在下感激不尽。 perl
[解决办法]

#!/usr/bin/perl

my %bhash;
my %chash;
 
sub read_file_to_hash {
    my ($name, $hash, $pat) = @_;
    open my $fd, '<', $name or die $!;
    while (<$fd>) {
        chomp;
        my ($x, $y, $z) = split /$pat/;
if ($z) {
$hash->{$y} = $z;
}
else {
        $hash->{$x} = $y;
}
    }
    close $fd;
}
 
read_file_to_hash('b.txt', \%bhash, '\*,');
read_file_to_hash('c.txt', \%chash, ',');

sub do_process {
my $str = shift @_;
my ($x, $y, $z) = $str =~ /=(\S+)/g;
my ($url, $apk) = ($y, $z);
$url =~ s
[解决办法]
(http://.*?/).*
[解决办法]
$1
[解决办法]
;
$apk =~ s
[解决办法]
.*/
[解决办法]
;
print join(',', ($x, $y, $z), $bhash{$url}, $chash{$apk}), "\n";
}

open $rfd, '<', 'a.txt' or die $!;
my $lines;
while (<$rfd>) {
chomp;
s/^\s+//g;
if (not /^$/) {
$lines .= $_;
next;
}
do_process($lines);
$lines = '';
}
if ($lines =~ /^.+$/) {
do_process($lines);
}
close $rfd;

输出:
11,http://www.baidu.com/1q2.XXXXX/XXX,http://www.baidu.com/msoft/sec/tmp/baidu.apk,111,123 


12,http://www.sina.com/xxdxx/dsfds,http://www.sina.com/msoft/sec/tmp/sina.apk,112,12223
13,http://www.qq.com/sdfsdfsdf/sdfsdfs,http://www.qq.com/qq.ak,,


[解决办法]
#!/usr/bin/perl

my %bhash;
my %chash;
 
sub do_process {
my $str = shift @_;
my ($x, $y, $z) = $str =~ /=(\S+)/g;
my ($url, $apk) = ($y, $z);
$url =~ s
[解决办法]
http://(.*?)/.*
[解决办法]
$1
[解决办法]
;
$apk =~ s
[解决办法]
.*/
[解决办法]
;
print join(',', ($x, $y, $z), $bhash{$url}, $chash{$apk}), "\n";
}

open my $fd, '<', 'b.txt' or die $!;
while (<$fd>) {
chomp;
my ($x, $y) = split /,/;
$x =~ s
[解决办法]
http://(.*?)/.*
[解决办法]
$1
[解决办法]
;
$bhash{$x} = $y;
}
close $fd;

open my $fd, '<', 'c.txt' or die $!;
while (<$fd>) {
chomp;
my ($x, $y, $z) = split /,/;
$chash{$y} = $z;
}
close $fd;

open my $fd, '<', 'a.txt' or die $!;
my $lines;
while (<$fd>) {
s/^\s+//g;
s/\s+$//g;
if (not /^$/) {
$lines .= $_;
next;
}
do_process($lines);
$lines = '';
}
if ($lines =~ /^.+$/) {
do_process($lines);
}
close $fd;

热点排行