如何删除 fasta 序列中的换行符

如何删除 fasta 序列中的换行符

modelfasta.fasta我有这样的fasta 文件 ( ):

>seq1
AAAAAAAAAAAAAAA
GGGGGGGGGGG
>seq2
TTTTTTTTTTTTTTT
CCCCCCC

我期待这样的输出:

>header>seq1
AAAAAAAAAAAAAAAGGGGGGGGGGG
>header>seq2
TTTTTTTTTTTTTTTCCCCCCC

我尝试使用 sed 和 awk 命令与 fasta 示例文件(modelfasta.fasta),但以这种方式获取输出

awk '{printf $0""}' modelfasta.fasta 

>seq1AAAAAAAAAAAAAAAGGGGGGGGGGG>seq2TTTTTTTTTTTTTTTCCCCCCC

它也会删除标题后面的换行符并将序列与标题合并

使用 sed 发现相同的结果

sed ':a;N;$!ba;s/\n//g' modelfasta.fasta

>seq1AAAAAAAAAAAAAAAGGGGGGGGGGG>seq2TTTTTTTTTTTTTTTCCCCCCC

我想删除除标题之外的所有新行,请帮忙

答案1

您想要从不以 fasta 标题字符开头的行中删除所有换行符>

awk '/^[>;]/ { if (seq) { print seq }; seq=""; print } /^[^>;]/ { seq = seq $0 } END { print seq }' data.fa

awk 脚本是

/^[>;]/    { if (seq) { print seq }; seq=""; print }
/^[^>;]/ { seq = seq $0 }
END     { print seq }

...这将根据在文件中找到的内容执行三件不同的事情。

  • fasta 标题行(以 开头的行>)或 fasta 注释行(以 开头的行;):打印我们记住的任何序列seq(如果有的话)(这属于前一个标题)。清除记住的序列。打印当前行(标题或注释)。
  • fasta 非标题(且非注释)行:将记住的序列与该行上的序列连接起来。这将有效地删除换行符。
  • 文件末尾:打印序列。这是与文件中最后一个标头关联的序列。

如果您想要对序列进行一些漂亮的打印,例如将其限制为每行 60 个字符:

#!/usr/bin/awk -f

function pretty(s) {
  p = "";
  n = 1;

  while (n < length(s)) {
    p = (p ? p "\n" : "") substr(s, n, 60);
    n += 60;
  }

  return p;
}

/^[>;]/  { if (seq) { print pretty(seq) }; seq=""; print }
/^[^>;]/ { seq = seq $0 } 
END      { print pretty(seq) }

将其放入prettyfasta.awk并使其可执行(chmod +x prettyfasta.awk),然后运行它:

$ ./prettyfasta.awk data.fa

相关内容