从网上下载的DNA序列在做生物信息或者机器学习之前,需要对序列进行质控,观察是否有一些特殊字符如“-”,“>"等。sed 是一个字符处理命令,可以使用正则表达式,可以对序列替换,删除,查找等处理,速度非常块,本次使用sed处理序列
要处理的序列如下:

test$less test.fa
>BetaCov/Wuhan/IVDC-HB-01/2019|EPI_ISL_402119
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAA
AATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGG
ACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTT
GTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAA>BetaCoV/Wuhan/IVDC-HB-04/2020|EPI_ISL_402120
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAA
AATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGG
ACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTT
GTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAAAAAAA>BetaCoV/Wuhan/IVDC-HB-05/2019|EPI_ISL_402121
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAA
AATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGG
ACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTT
GTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAA>BetaCoV/Wuhan/IPBCAMS-WH-01/2019|EPI_ISL_402123
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAA
AATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGG

1 .首先第二行下面的">"在中间,需要在此处分行,在“>"符号前面加\n换行符:

test$sed '2,$s/>/\n>/g' test.fa >test2.fa # 懂第2行开始到结尾行,将>替换为换行符(“\n”)+>
test$head test2.fa
>BetaCov/Wuhan/IVDC-HB-01/2019|EPI_ISL_402119
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAA
AATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGG
ACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTT
GTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAA-----
>BetaCoV/Wuhan/IVDC-HB-04/2020|EPI_ISL_402120
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAA
AATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGG
ACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTT

所有">"已在新的一行,查看序列行数:

test$wc -l test2.fa
21 test2.fa
test$grep ">" test2.fa|wc -l

大部分序列最好将fasta文件序列文件变成一行,而上面显示是多行fasta

2. 多行fasta变单行

test$awk '/^>/&&NR>1{print "";}{printf "%s",/^>/?$0"\n":$0}' test2.fa >test3.fa
test$head test3.fa 
>BetaCov/Wuhan/IVDC-HB-01/2019|EPI_ISL_402119
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTT--GTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAA------
>BetaCoV/Wuhan/IVDC-HB-04/2020|EPI_ISL_402120
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTT--GTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAAAAAAA
>BetaCoV/Wuhan/IVDC-HB-05/2019|EPI_ISL_402121
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTT--GTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAA
>BetaCoV/Wuhan/IPBCAMS-WH-01/2019|EPI_ISL_402123
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGG:test$ # 序列最后没有分行,无换行符
test$wc -l test3.fa
7 test3.fa
test$grep ">" test3.fa|wc -l

产看行“>"数目发现有4条fasta序列,应该有8行,而显示只有7行,而且查看序列发现最后一行没有换行符,所以序列末尾和linux终端命令连在一起,因此在序列最后末尾加上换行符:
单行变多行有多条命令可用,可参考本人文章
一条命令实现fasta序列多行变单行

3. 序列最后加上换行符

test$sed '$s/$/\n/' test3.fa >test4.fa
test$wc -l test4.fa
8 test4.fa
test$grep ">" test4.fa|wc -l

加换行符还有第二种方法:

sed -i '$a\' test3.fa

-i表示直接在原来文件中修改,$表示在最后一行处理,a表示在末尾添加,\后面更要添加的内容,由于sed添加内容会先先换行,所以这儿后面不加如何内容直接换行。如果想加内容直接加在\后面即可,如sed -i '$a\yourtext'

4. 去掉末尾的特殊符号

第一条序列末尾含有“----”横杠,需要删除,但序列中间的–应该保留

test$sed -r 's/\-+$//' test4.fa >test5.fa
test$cat test5.fa
>BetaCov/Wuhan/IVDC-HB-01/2019|EPI_ISL_402119
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTT--GTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAA
>BetaCoV/Wuhan/IVDC-HB-04/2020|EPI_ISL_402120
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTT--GTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAAAAAAA
>BetaCoV/Wuhan/IVDC-HB-05/2019|EPI_ISL_402121
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTT--GTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAA
>BetaCoV/Wuhan/IPBCAMS-WH-01/2019|EPI_ISL_402123
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGG

第一行末尾-----已删除

参数意义:

  • r :扩展的正则表达式
  • s:sed替换命令;
  • \:转义符号;
  • +:扩展正则表达式,表示一个或者多个;
  • $:定位符,每行末尾。

如果序列中含有“ . ” “ * ”等符号时,也可以用该命令替换,如修改* 可用sed -r 's/\*+$//' test4.fa >test5.fa

5. 序列中间含有“-”,可能是比对时产生的,我们将其换成n

由于在序列名称中也有-,因此需要反向选择含有“>"的行,即出去开头含有“>"的行

test$sed '/^>/!s/-/N/g' test5.fa >test6.fa
test$cat test6.fa
>BetaCov/Wuhan/IVDC-HB-01/2019|EPI_ISL_402119
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTNNGTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAA
>BetaCoV/Wuhan/IVDC-HB-04/2020|EPI_ISL_402120
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTNNGTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAAAAAAA
>BetaCoV/Wuhan/IVDC-HB-05/2019|EPI_ISL_402121
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTNNGTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAA
>BetaCoV/Wuhan/IPBCAMS-WH-01/2019|EPI_ISL_402123
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGG

可见序列中间的–变成NN
参数意义

  • /^>/!s/-/N/g’
  • /^>/! : ^定位符,序列开头;/^>/ 匹配>开头的行,就是序列标题行。然后!否定符号,即符合匹配模式之外的行,就是序列行
  • s/-/N/g:s,sed 替换,g全局替换

6.序列名字太长,修改序列名字只保留accession

test$grep ">" test6.fa 
>BetaCov/Wuhan/IVDC-HB-01/2019|EPI_ISL_402119
>BetaCoV/Wuhan/IVDC-HB-04/2020|EPI_ISL_402120
>BetaCoV/Wuhan/IVDC-HB-05/2019|EPI_ISL_402121
>BetaCoV/Wuhan/IPBCAMS-WH-01/2019|EPI_ISL_402123

观察序列名称的模式,发现只需要把BetaCov…|删除即可,由于第一序列cov中的v为小写,需要正则表达是[]

test$sed 's/BetaCo[vV]\/.*|//' test6.fa >test7.fa
test$cat test7.fa 
>EPI_ISL_402119
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTNNGTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAA
>EPI_ISL_402120
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTNNGTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAAAAAAA
>EPI_ISL_402121
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTNNGTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAA
>EPI_ISL_402123
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGG

参数意义:
‘s/BetaCo[vV]/.*|//’

  • BetaCo[vV]:表示匹配BetaCov和BetaCoV
  • / :表示匹配名称中的“/”,需要转义符号“\”将其于sed命令的“\”区分开
  • .* :.任意字符,0次或者多次,此处也可改成+(1次或者多次,但要加-r参数,指定其使用扩展正则表达式)

最终结果序列名称更加精简,序列中不含特殊字符,并且变成一行,可以用于下游分析。

从网上下载的DNA序列在做生物信息或者机器学习之前,需要对序列进行质控,观察是否有一些特殊字符如“-”,“>"等。sed 是一个字符处理命令,可以使用正则表达式,可以对序列替换,删除,查找等处理,速度非常块,本次使用sed处理序列要处理的序列如下:test$less test.fa>BetaCov/Wuhan/IVDC-HB-01/2019|EPI_ISL_402119ATTA...
“ DupRemover”-重复卸妆 删除multifasta文件的重复序列。 DupRemover查找重复的序列并保留唯一的序列,同时将所有fasta标头连接到一个核苷酸或氨基酸multifasta文件。 生物蟒> = 1.78 安装biopython(如果尚未安装) pip3安装biopython或python3.6 -m pip安装biopython python3 DupRemover.py / path / to / input_file / path / to / output_file python3 DupRemover.py Mixed_sequences.fasta Unique_sequences.fasta 重复删除已获得GNU通用公共许可证v3.0的许可。此强大的copyleft许可证的许可条件是,必须在同一许可证下提供许可作品和修
这是我导师给我的一个任务 从一个很大的fasta文件提取序列名称含有特定字样的序列,合成新的fasta文件 一开始一直想不到怎么去做,知道调用了split-fasta这个python库。 话不多说,上代码! (这是基于windows下的啊 打开pycharm copy好文件到项目目录 系统终端输入: pip install spilt-fasta 之后直接在命令行(系统终端命令行,不是python的) splitfasta 你要分割的fasta文件名.fasta 之后他会创建一个目录test_split
sed 是一种流编辑器,它一次处理一行内容。 处理时,把当前处理的行存储在称为“模式空间”(pattern space)的临时缓冲区,接着用 sed 命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。 生成联系文件 leadingsci@DELL5577:~/Test$ cat df.txt Filesystem Size Use...
解除R中从github上下载包API限制的问题(Error: Failed to install ‘unknown package‘ from GitHub: HTTP error 403. ) 家长麦单推人: ubuntu系统能用这种方法吗,github上有没有文档说明 解除R中从github上下载包API限制的问题(Error: Failed to install ‘unknown package‘ from GitHub: HTTP error 403. ) 2301_76634733: Error in utils::download.file(url, path, method = method, quiet = quiet, : cannot open URL 'https://api.github.com/repos/MRCIEU/TwoSampleMR/tarball/HEAD' 解除R中从github上下载包API限制的问题(Error: Failed to install ‘unknown package‘ from GitHub: HTTP error 403. ) weixin_44335331: 谢谢亲 解决了 解除R中从github上下载包API限制的问题(Error: Failed to install ‘unknown package‘ from GitHub: HTTP error 403. ) mac 中awk和linux中awk不一致,ARGIND==1不识别的问题。 matplotlib保存图片为pdf格式,文字以字体形式保存,可以illustrator编辑,而不是喵点格式。