作业帮 > 综合 > 作业

perl 按列统计 计算A,B,C,D列中 数字2 在每列中出现的百分率.

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/27 12:26:39
perl 按列统计 计算A,B,C,D列中 数字2 在每列中出现的百分率.
计算A,B,C,D列中 数字2 在每列中出现的百分率.


 Name    
 A    
 B    
 C    
 D    
 sample1    
 1    
 2    
 3    
 4    
 sample2    
 1    
 2    
 3    
 4    
 sample3    
 1    
 2    
 3    
 4    
 sample4    
 3    
 2    
 8    
 4    
 sample5    
 1    
 2    
 3    
 2    
 sample6    
 1    
 5    
 3    
 4    
 sample7    
 1    
 2    
 3    
 4    
 sample8    
 1    
 2    
 3    
 4    
 sample9    
 1    
 2    
 2    
 4    
 sample10    
 1    
 2    
 3    
 2    
 sample11    
 2    
 2    
 3    
 4    
 sample12    
 1    
 2    
 3    
 2    
 sample13    
 1    
 2    
 3    
 4    
use strict;

# 设定
my $col_per_row = 5;
my $lookup_target = 2;
# my $lookup_target = "2"; # 如果你搜的是文字就用这句, 不要上面那句


my @fields;
foreach ( 1 .. $col_per_row ) {
    my $field_name = <DATA>;
    chomp $field_name;
    push @fields, $field_name;
}

my @data = <DATA>;
chomp @data;

my (%hash, $total_rows) ;
while ( @data ) {    
    $total_rows++;
    foreach my $col ( 0..$#fields ) {
        $hash{$fields[$col]}[$total_rows] = shift @data;
    }
}    

foreach my $col_index ( 1.. $#fields ) {
    print "target '$lookup_target' in col $fields[$col_index] = ";
    my $sum;
    foreach ( 1 .. $total_rows ) {
        $sum ++ if $hash{$fields[$col_index]}[$_] == $lookup_target;
        # $sum ++ if $hash{$fields[$col_index]}[$_] eq $lookup_target; # 如果你搜的是文字就用这句, 不要上面那句
    }
    
    my $percent;
    $percent = sprintf "%.2f", ($sum / $total_rows * 100 );
    print "$percent%$/";
}

__DATA__
Name
A
B
C
D
sample1
1
2
3
4
sample2
1
2
3
4
sample3
1
2
3
4
sample4
3
2
8
4
sample5
1
2
3
2
sample6
1
5
3
4
sample7
1
2
3
4
sample8
1
2
3
4
sample9
1
2
2
4
sample10
1
2
3
2
sample11
2
2
3
4
sample12
1
2
3
2
sample13
1
2
3
4