这个如何统计

这个如何统计

file1:
赵敏 女 平谷区
索尔图 男 湾仔区
刘一周 男 湾仔区
洪教主 男 高新区
陈近南 男 武侯区
周芷若 女 金牛区
沐剑屏 女 高新区
方怡 女 武侯区
韦小宝 男 荔湾区
阿珂 女 盐田区
张三丰 男 福田区
多隆 男 海珠区
虚竹 男 黄浦区
段誉 男 宣武区
黄语嫣 女 嘉定区
丁典 男 中西区
白云飞 男 福田区
陈百川 男 黄埔区
陆隐峰 男 金牛区
乔春浦 男 荔湾区
任盈盈 女 海珠区
任我行 男 海珠区
令狐冲 男 高新区
岳不群 男 武侯区
林平之 男 黄埔区
刘正风 男 长宁区
郑克爽 男 宝安区
冯锡范 男 海珠区
.......


file2:
男 唱歌
女 跳舞


file3:
北京 朝阳区|宣武区|海淀区|平谷区
上海 黄浦区|杨浦区|徐家汇|长宁区|嘉定区
深圳 罗湖区|福田区|南山区|盐田区|宝安区|龙岗区
香港 中西区|湾仔区|元朗区
广州 天河区|越秀区|荔湾区|海珠区|白云区|黄埔区|番禺区
成都 金牛区|武侯区|高新区|成华区|青羊区|区锦江区


由以上3个文件如何通过perl统计得到:

北京[朝阳区]:5人 北京[平谷区]:1人      ...... 共20人
上海[黄浦区]:0人 上海[长宁区]:5人      ......  共56人
......


唱歌[北京]:10人  唱歌[上海]:50人       ......  共98人
跳舞[北京]:1人  跳舞[上海]:6人          ......  共30人


北京 唱歌 女 赵敏,.......                  ...... 共20人
北京 唱歌 男 段誉,.......                  ...... 共20人


赵敏       女    北京     平谷区
索尔图    男    香港      湾仔区
刘一周    男    香港      湾仔区
洪教主    男    成都      高新区
陈近南    男    成都      武侯区
...........
你把数据弄到数据库里去,比如 sqlite ,然后再弄得了


QUOTE:
原帖由 cobrawgl 于 2008-11-27 13:02 发表
你把数据弄到数据库里去,比如 sqlite ,然后再弄得了

我想用perl写
用 perl 的 dbi 可以么?

用 perl 比较复杂些吧
给你弄个 示例 看看,自己做其它几个吧


#!/usr/bin/perl

use strict;
use warnings;

use IO::File;

my $file1 = IO::File->new('file1.txt');
my $file2 = IO::File->new('file2.txt');
my $file3 = IO::File->new('file3.txt');

my @people;
while ($_ = $file1->getline) {
        chomp;
        push @people, [(split)];
}

my %city;
while ($_ = $file3->getline) {
        chomp;
        my @t = (split);
        $city{$t[0]} = [(split /\|/, $t[1])];       
}


#---------------------------------
for my $p (@people) {
        for my $k (keys %city) {
                for (@{$city{$k}}) {
                        if ($p->[2] eq $_) {
                                print $p->[0], " ", $p->[1], " ", $k, " ", $p->[2], "\n";
                        }
                }
        }
}

print "\n\n\n\n";

#---------------------------------
for my $k (keys %city) {
        my %count;
        my $count;

        for (@{$city{$k}}) {
                for my $p (@people) {
                        $count{$_} ++ if $p->[2] eq $_;
                }
                if ($count{$_}) {
                        print "$k\[$_\]: ", $count{$_}, " ";
                        $count += $count{$_};
                }
        }

        print "    共 $count 人\n";
}

#---------------------------------