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