免费注册 查看新帖 |

Chinaunix

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

perl如何统计文件英文字母的出现次数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-25 17:00 |只看该作者 |倒序浏览

  1. #! /bin/perl

  2. %occurrence = ("sum" => 0, "a" => 0, "b" => 0, "c" => 0, "d" => 0,
  3.                          "e" => 0,      "f" => 0, "g" => 0, "h" => 0, "i" => 0,
  4.                  "j" => 0,      "k" => 0, "l" => 0, "m" => 0, "n" => 0);


  5. open TEXT, "/root/test.txt"
  6.   or die "Can't open file!";

  7. while (<TEXT>){
  8.         chomp;
  9.         if (/a/gi) {
  10.                 $occurrence{"a"}++;
  11.                 $occurrence{"sum"}++;
  12.         }
  13. }

  14. foreach (sort keys %occurrence){
  15.                 print "$_ : $occurrence{$_}\n";
  16. }
复制代码


test.txt如下:
aa
输出为a => 1; sum =>1;


上面这个程序的问题就是:如果一行里面有许多a, 程序仍然只讲a的occurrence加1?
请问这个应该怎么解决?然后就是我怎么才能计算所有英文字符的总出现率?

谢谢了!

论坛徽章:
0
2 [报告]
发表于 2005-12-25 17:15 |只看该作者
好像问题很多,或者说是思路完全错了
请教各位高手

论坛徽章:
0
3 [报告]
发表于 2005-12-25 17:46 |只看该作者
#! /bin/perl

my %occurrence = ("sum" => 0, "a" => 0, "b" => 0, "c" => 0, "d" => 0,
                  "e" => 0,   "f" => 0, "g" => 0, "h" => 0, "i" => 0,
                  "j" => 0,   "k" => 0, "l" => 0, "m" => 0, "n" => 0);

#while ( ($key, $value) = each %occurrence){
#        print "$key => $value\n";       
#}


open TEXT, "d:/test.txt"
  or die "Can't open file!";
while (<TEXT>){
        chomp;
        $_ = lc($_);
        $_ =~ s/[\W]//gi;
        my $len = length($_);
        $occurrence{"sum"} = $occurrence{"sum"} + $len;
        foreach my $i (split//,$_){
                if ($i ge "a" and $i le "n"){
                        $occurrence{$i}++;
                }
        };
}

foreach (sort keys %occurrence){
                print "$_ : $occurrence{$_}\n";
}
       

这个好像就可以了
统计所有英文字符出现次数, 同时计算a到n所有字符出现次数,忽略大小写

[ 本帖最后由 angelanpan 于 2005-12-25 18:08 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2005-12-25 17:51 |只看该作者
[web01@admin ~/angelflower/tmp]$ cat 1.txt
afsafdf
dfdfdf
eejfjnfdsfm
dfdjifjdf
eeffhhh
zvmmvww


[web01@admin ~/angelflower/tmp]$ cat 1.pl
#!/usr/bin/perl
use strict;

my %tmp;
open (HD,"1.txt") or die "$!";

map { $tmp{$_}++; $tmp{sum}++ }
  map { chomp; split //,$_ } <HD>;

close HD;

print "$_: $tmp{$_}\n"
   foreach (sort { $tmp{$b} <=> $tmp{$a} } keys %tmp);


[web01@admin ~/angelflower/tmp]$ perl 1.pl
sum: 47
f: 14
d: 8
e: 4
j: 4
m: 3
h: 3
w: 2
a: 2
v: 2
s: 2
n: 1
z: 1
i: 1



这是偶以前测试时写着玩的,你看看是否有用?

论坛徽章:
0
5 [报告]
发表于 2005-12-25 18:10 |只看该作者
谢谢兰花仙子
我上面写出来的程序也是参考了你以前的帖子写出来的
非常谢谢

我现在再去体会一下你现在给我的回帖

论坛徽章:
0
6 [报告]
发表于 2013-01-28 20:12 |只看该作者
看来还是hash好用

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
7 [报告]
发表于 2013-01-28 21:13 |只看该作者
grep 返回值不就是次数吗?

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
8 [报告]
发表于 2013-01-29 02:09 |只看该作者
3Q~我再去体会一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP