Re: [問題] 多行的統計
※ 引述《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
→
02/24 10:49, , 1F
02/24 10:49, 1F
※ 編輯: frank1983 來自: 61.230.178.211 (02/26 03:22)
推
02/26 04:30, , 2F
02/26 04:30, 2F
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章