1. combine columns according column names
#!/usr/bin/perl -w use strict; my (@name, @A, @B, @all); @name = split /\s+/, <DATA>; # skip first line; print "$name[0]\tA\tB\n"; for (0 .. $#name) { push(@A, $_), next if $name[$_] =~ /^A/; # save array indices; push(@B, $_), next if $name[$_] =~ /^B/; } while (<DATA>) { chomp; @all = split; my $A_start = $A[0]; my $A_end = $A[-1]; my $A_sum = 0; map {$A_sum += $_} @all[$A_start..$A_end]; my $A_mean = $A_sum/@A; print "$all[0]\t$A_mean\t"; my $B_start = $B[0]; my $B_end = $B[-1]; my $B_sum = 0; map {$B_sum += $_} @all[$B_start..$B_end]; my $B_mean = $B_sum/@B; print "$B_mean\n"; } __DATA__ name A1 A2 A3 B1 B2 B3 B4 …… a 1 2 3 4 4 4 8 …… b 6 3 9 12 16 12 32 …… c 9 33 12 16 20 24 24 …… d 9 9 15 28 24 16 32 ……
Output:
name A B a 2 5 b 6 18 c 18 21 d 11 25
没有评论:
发表评论