- 论坛徽章:
- 307
|
本帖最后由 sunzhiguolu 于 2016-08-21 01:37 编辑
- #!/usr/bin/perl
- use strict;
- use warnings;
- my ($offset, $idx, $last) = (-1, 0, "");
- my (%grpMap, %grpCnt, @aTh, @aData);
- while (<>){
- next if (/\A\s*ID/);
- if ($last ne $ARGV){
- $last = $ARGV;
- %grpCnt = ();
- $offset++;
- }
- my @aCols = split;
- my $group = @aCols > 3 ? "@aCols[1, 2]" : $aCols[1];
- if (!exists $grpMap{$group}){
- $grpMap{$group} = $idx++;
- push (@aTh, $group);
- }
- my $index = $grpMap{$group};
- $aData[$index][$offset] = ++$grpCnt{$group};
- }
- print join ("\t", qw /group A1 A2 A3/), "\n";
- while (my ($gID, $gName) = each @aTh){
- $aData[$gID][$offset] = $aData[$gID][$offset] // 0;
- my @aT = map {defined ? $_ : 0} @{$aData[$gID]};
- print join ("\t", $gName, @aT), "\n";
- }
复制代码 perl abc.pl a1.txt a2.txt a3.txt
----------------------------------------------------------------------
group A1 A2 A3
s k 1 0 1
aa1 1 2 0
a b 2 1 1
|
|