作者frank1983 (What?)
看板Perl
标题Re: [问题] 多行的统计
时间Wed Feb 24 02:48:02 2010
※ 引述《adu (^_^)》之铭言:
: 想做的类似找出consensus
: 原始的资料是已经排列好的字串:
: >字串名子
: 字串内容
: 的形式
: ===
: i.e.
: >1F3T.pdb_chainA_s004
: ---------------RFL-EG-----FNTRDALCKKIS
: >7ODC.pdb_chainA_s010
: SSFTKDEFD-----CHILDEG-----FTAKDILDQKIN
: >1D7K.pdb_chainA_s003
: -----EEFD-----CHFLDEG-----FTAKDILDQKIN
: ===
: 内容的长度都一样。(-算第27个字母)
: 想将相同定位点的字元做统计
: 如倒数第四个分别是K, Q, Q, 可以算出2/3Q, 1/3K,然後输出Q
: 倒数第三K, K, K,就直接输出K,
: 想请板大提供一些方法><
: 谢谢~~
不知道这样写是否符合你的要求?
my @out = ();
my @cnt = ();
while (<DATA>) {
next if /^>/;
chomp;
my @c = split //;
for my $i (0 .. $#c) {
my $c = $c[$i];
++$cnt[$i]{$c};
for ($out[$i]) { # alias
$_ = $c if !defined($_) || $cnt[$i]{$c} > $cnt[$i]{$_};
}
}
}
print join '', @out;
*Write only 版本:-)
use List::Util qw(reduce);
my @c = ();
sub { ++$c[$_]{$_[$_]} for 0 .. $#_ }
->( split // ) for sub { chomp @_; @_ }
->( grep { !/^>/ } <DATA> );
print reduce {
!defined($a) ? $b : $_->{$b} > $_->{$a} ? $b : $a
} undef, keys(%$_) for @c;
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.178.211
1F:→ adu:alias? 谢谢f大! 02/24 10:49
※ 编辑: frank1983 来自: 61.230.178.211 (02/26 03:22)
2F:推 paulpu:ㄅ错看喔...箭头丢进去 reduce排... 02/26 04:30