将子串按给定比例与fasta格式的序列交换

问题描述 投票:0回答:1

我有两个非交错 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"

等等。但我只处理字符串,我必须首先计算要保留的字符数......

bash awk bioinformatics fasta
1个回答
0
投票

使用

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
© www.soinside.com 2019 - 2024. All rights reserved.