Re: [問題] 多行的統計

看板Perl作者 (What?)時間15年前 (2010/02/24 02:48), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串3/4 (看更多)
※ 引述《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
alias? 謝謝f大!
02/24 10:49, 1F
※ 編輯: frank1983 來自: 61.230.178.211 (02/26 03:22)

02/26 04:30, , 2F
ㄅ錯看喔...箭頭丟進去 reduce排...
02/26 04:30, 2F
文章代碼(AID): #1BX2BbSZ (Perl)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 4 篇):
文章代碼(AID): #1BX2BbSZ (Perl)