我有两个非交错 fasta 格式的序列:
>SEQ1
AAAAAAAAAA
>SEQ2
TTTTTTTTTT
我想按照一定的比例交换两个序列的部分。如果比例为 0.5(即 50/50),则为:
>SEQ1
AAAAATTTTT
>SEQ2
TTTTTAAAAA
例如,0.3(即 30/70)则为:
>SEQ1
AAAAAAATTT
>SEQ2
TTTTTTTAAA
我设法在 bash 中通过提取子字符串并合并它们来完成一些操作,例如:
SEQ1="AAAAAAAAAA"
SEQ2="TTTTTTTTTT"
SEQ1A=${SEQ1:0:7}
SEQ2B=${SEQ2:7:10}
NEWSEQ1="$SEQ1A$SEQ2B"
等等。但我只处理字符串,我必须首先计算要保留的字符数......
使用
awk
$ awk -v prob1=0.5 '/^>/{x=$1; n++; next} {f[n]=$1; name[n]=x}
END{prob2=1-prob1 # construct probability 2 from prob 1
# construct first seq
seq=substr(f[1], 1, int(length(f[2])*prob1))""\
substr(f[2], 1, int(length(f[2])*prob2))
print name[1]"\n"seq
# construct second seq
split(seq,arr,//)
print name[2]
for(i=length(arr);i>=1;i--){printf arr[i]}; print ""}' fasta
>SEQ1
AAAAATTTTT
>SEQ2
TTTTTAAAAA
$ cat fasta
>SEQ1
AAAAAAAAAA
>SEQ2
TTTTTTTTTT