【发布时间】:2014-10-26 16:11:00
【问题描述】:
我最近一直在学习 Bash,但我在嵌套循环时遇到了麻烦。
这就是我得到的。
input='ATAATAATAATG'
CODONTABLE=(ATA I ATC I ATT I ATG M ACA T
ACC T ACG T ACT T AAC N AAT N
AAA K AAG K AGC S AGT S AGA R
AGG R CTA L CTC L CTG L CTT L
CCA P CCC P CCG P CCT P CAC H
CAT H CAA Q CAG Q CGA R CGC R
CGG R CGT R GTA V GTC V GTG V
GTT V GCA A GCC A GCG A GCT A
GAC D GAT D GAA E GAG E GGA G
GGC G GGG G GGT G TCA S TCC S
TCG S TCT S TTC F TTT F TTA L
TTG L TAC Y TAT Y TAA _ TAG _
TGC C TGT C TGA _ TGG W)
for ((i=0;i<${#input};i++)) ; do
let w+=1
for c in $input ; do
for h in $CODONTABLE ; do
if [ $(echo ${input:x:3})=$(echo $CODONTABLE[w]) ] ; then
mod+=(${CODONTABLE[w]})
let x+=1
else
let w+=1
fi
done
done
done
echo $mod
echo $input
我从中得到的是……
ATAATAATAATG
I
看来至少 ATA 被正确地翻译成 I。 但是,我想要的是
**ATA**ATAATAATG -> I
A**TAA**TAATAATG -> _
AT**AAT**AATAATG -> N
ATA**ATA**ATAATG -> I
因此最终输出为I_NI_NI_NM,我稍后会使用它。
简而言之,我如何创建一个正确的重复循环来遍历我的输入,翻译每个可能的 3 个字符帧,并将其附加到另一个数组?
【问题讨论】:
标签: arrays bash loops bioinformatics