请问如何批量查询不同学生的记录中符合要求的行数

例子如下:
张三      [Tribolium castaneum无脊椎]
张三      [Carboxydibrachium pacificum DSM 12653细菌]
张三      [Thermoanaerobacter tengcongensis MB4细菌]
李四      [Eubacterium biforme DSM 3989细菌]
李四      [Culex quinquefasciatus细菌]
李四      [Dyadobacter fermentans DSM 18053细菌]
孙晓      [Dyadobacter fermentans DSM 18053细菌]
孙晓      [Tribolium castaneum无脊椎]
孙晓      [Acyrthosiphon pisum无脊椎]
。。。。。。
我想同时查询张三,李四,孙晓的所有行里面包含“细菌”的行的个数,返回的结果我希望是这样的
张三  2
李四  3
孙晓  1
。。。。。。
请问各位高手该如何实现?

作者: chenjiali1   发布时间: 2011-06-09

本帖最后由 ulmer 于 2011-06-09 16:29 编辑

回复 chenjiali1
1. using hash as counter.
2. split line to get column 1 as key, column2 as value.
3. pattern match value and count it,
  1. use strict;
  2. use Data::Dumper;

  3. my %counter = ();
  4. while (<DATA>) {
  5.     chomp;
  6.     my ($name, $value) = split /\s+\[/;
  7.     $counter{$name}++ if $value =~ /细菌/;
  8. }
  9. print Dumper \%counter;

  10. __DATA__
  11. 张三      [Tribolium castaneum无脊椎]
  12. 张三      [Carboxydibrachium pacificum DSM 12653细菌]
  13. 张三      [Thermoanaerobacter tengcongensis MB4细菌]
  14. 李四      [Eubacterium biforme DSM 3989细菌]
  15. 李四      [Culex quinquefasciatus细菌]
  16. 李四      [Dyadobacter fermentans DSM 18053细菌]
  17. 孙晓      [Dyadobacter fermentans DSM 18053细菌]
  18. 孙晓      [Tribolium castaneum无脊椎]
  19. 孙晓      [Acyrthosiphon pisum无脊椎]
复制代码

作者: ulmer   发布时间: 2011-06-09

  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;

  4. my %hash;

  5. while(<DATA>)
  6. {
  7.         my ($name, $info) = split / {2,}/;
  8.         $hash{$name} = [] unless exists $hash{$name};
  9.         push @{$hash{$name}}, $info;
  10. }

  11. my $cnt = 0;
  12. while (my ($key, $value) = each %hash)
  13. {
  14.         print $key,"\t";
  15.         for(@{$value})
  16.         {
  17.                 if (/细菌/)
  18.                 {
  19.                         ++$cnt;
  20.                 }
  21.         }
  22.         print $cnt,"\n";
  23.         $cnt = 0;
  24. }

  25. __DATA__
  26. 张三      [Tribolium castaneum无脊椎]
  27. 张三      [Carboxydibrachium pacificum DSM 12653细菌]
  28. 张三      [Thermoanaerobacter tengcongensis MB4细菌]
  29. 李四      [Eubacterium biforme DSM 3989细菌]
  30. 李四      [Culex quinquefasciatus细菌]
  31. 李四      [Dyadobacter fermentans DSM 18053细菌]
  32. 孙晓      [Dyadobacter fermentans DSM 18053细菌]
  33. 孙晓      [Tribolium castaneum无脊椎]
  34. 孙晓      [Acyrthosiphon pisum无脊椎]
复制代码
perl  xx.pl
张三    2
李四    3
孙晓    1

作者: Cu_fans   发布时间: 2011-06-09