回复 7# sunzhiguolu
$ perl gc.pl
| d T s 8
N 6 d s 8 5 | \ 4 s a w d 4 1 /
Q d s 5 | \ 4 s
N d s 8 5 | \ 4 s a w d 4 1 / * [ ] d f ~ 9 D E F + V F - V _ S
| s d
N N U s 8 5 |
N,3 d,3 d,2 s,3 8,3 5,2 |,2 4,1 4,1 a,1 w,1 w,1 4,1 1,1 /,1 ,1 1,1 /,1 d,1 f,1 ~,1 9,1 D,1 ,1 E,1 F,1 +,1 V,1 F,1 -,1 V,1 _,1 S,1
|,2 6,1 s,2 8,1 |,1 \,1 \,1 \,1 s,1 s,1 a,1 d,1 d,1 4,1 ,1 *,1 [,1 ],1
Q,1 N,1 T,1 5,1 5,1 |,1 4,1 s,1
s,1 U,1
$ cat gc.pl
#!/usr/bin/perl
use strict;
use warnings;
my %hData;
my ($sMax_n, $sMax_m) = (0,0);
while (<DATA>){
my $sPos = 0;
while(m/(.)/g){
print "$1 ";
$hData{$sPos++}{$1}++;
}
$sMax_n = $sPos if($sMax_n < $sPos);
print "\n";
}
my @aOut;
foreach my $sN (keys %hData){
my $rh = $hData{$sN};
my $sPos = 0;
foreach (sort {$rh->{$b} <=> $rh->{$a}} keys %{$rh}){
$aOut[$sPos++][$sN] = "$_,$rh->{$_}";
}
$sMax_m = $sPos if($sMax_m < $sPos);
}
my $sOut;
foreach my $sM (0 .. $sMax_m-1){
$sOut = "";
foreach my $sN (0 .. $sMax_n-1){
$sOut .= ($aOut[$sM][$sN] // " "). " " ;
}
print "$sOut\n";
}
__DATA__
|dTs8
N6ds85|\4sawd4 1/
Qds5|\4s
Nds85|\4sawd41/*[]df~9D EF+VF-V_S
|sd
NNUs85|
|