目的:提取fasta文件id中的‘LOC107408734’
NM_001323852.1 polyphenol oxidase, chloroplastic-like (LOC107408734), mRNA
grep ">" file.fa | sed 's/.*\(LOC.*\)/\1/g' | cut -d '(' -f2|cut -d ')' -f1 > locid.txt
#grep ">" file.fa 提取所有id
#sed 's/.*\((LOC.*\)/\1/g' 删除‘(LOC.....)’前的所有的字符
#cut -d '(' -f2|cut -d ')' -f1 保留‘(LOC.....)’中括号里的内容
使用shell脚本批量修改fasta文件中序列名字
如果序列的名字太长,希望简化一下名字,方便下游数据分析
图片.png
举一个栗子,想使用“gene=”之后的基因缩写名字来重命名
可以使用shell中的SED命令完成
SED是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大。
sed 's/>.*\[gene=/>/;s/\].*//' ecoli.cds > ecoli.cds.rename
其中ecoli.cds为下载的基因序列文件,ecoli.cds.rename为改名后的序列文件。
也可以使用正则表达式来实现:
()是扩展正则表达式的元字符,sed软件默认识别基本正则表达式,-r :支持扩展表达式,后面被替换的内容中的\1就是取前面的括号里的内容了
sed -r 's/>.*gene=([a-zA-Z]*).*/>\1/' ecoli.cds > ecoli.cds.rename
查看结果,所有序列的名字都变为基因缩写名字。
图片.png