将fasta序列多行变单行——使用 awk 或 seqkit 或 python

fasta序列多行变单行

许多序列处理软件要求fasta序列为单行,但很多时候下载的序列都是多行fasta序列,因此需要转换成单行fasta格式:


多行fasta文件例如test.fa:

cat test.fa 
>seq1
ATTAAAGGTTTATACCTTCC
AATCTGTGTGGCTGTCACTC
ACACGAGTAACTCGTCTATC
>seq2
ATTAAAGGTTTATACCTTCC
AATCTGTGTGGCTGTCACTC


方法一:使用awk加条件判断(比较快)

awk '{if($0~/>/) name=$0 ;else seq[name]=seq[name]$0;}END{for(i in seq) print i"\n"seq[i]}}' test.fa
>seq1
ATTAAAGGTTTATACCTTCCAATCTGTGTGGCTGTCACTCACACGAGTAACTCGTCTATC
>seq2
ATTAAAGGTTTATACCTTCCAATCTGTGTGGCTGTCACTC


方法二:seqkit工具

将多行序列转换为一行序列

seqkit seq test.fa -w 0 > test_w.fa

指定每行输出的碱基数

seqtk seq -l 50 test.fa > test50.fa

只输出序列

seqkit seq test.fa -s -w 0 > test_seq.fa

将只输出的序列的,指定每行输出的碱基数

seqkit seq test_seq.fa -s -w 40 > test_seq40.fa


方法三:使用python脚本

fr=open('test.fa', 'r')  #读文件
fw=open('out.fa', 'w')  #写文件
seq={}
for line in fr:
    if line.startswith('>'):    #判断字符串是否以‘>开始’
        name=line.split()[0]    #以空格为分隔符。
        seq[name]=''
    else:
        seq[name]+=line.replace('\n', '')
fr.close()
for i in seq.keys():
    fw.write(i)
    fw.write('\n')
    fw.write(seq[i])
    fw.write('\n')
fr.close()

根据自己的文件名,修改读入文件名,运行该脚本即可



参考:https://blog.csdn.net/weixin_44022515/article/details/104257520

           https://blog.csdn.net/xiaobai1_1/article/details/107330739

  • 发表于 2022-12-26 16:03
  • 阅读 ( 4532 )
  • 分类:软件工具

0 条评论

请先 登录 后评论
星莓
星莓

生物信息工程师

58 篇文章

作家榜 »

  1. omicsgene 698 文章
  2. 安生水 347 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. xun 80 文章
  6. 红橙子 78 文章
  7. rzx 74 文章
  8. CORNERSTONE 72 文章