linux中简化fasta序列ID

有的时候我们会在服务器上操作,如果总是借助TBtools简化ID,再导入服务器未免有些麻烦了。其实一个简单的grep和awk指令就可以完成。

假设我们有input.fa其中他们的ID分别是(拟南芥WUS基因为例子):

>AT2G17950.1 | Symbols: WUS, WUS1, PGA6 | WUSCHEL 1, WUSCHEL | chr2:7809100-7810671 REVERSE LENGTH=292

……省略蛋白序列

>AT2G33880.2 | Symbols: WOX9A, STIP, HB-3, WOX9 | STIMPY, WUSCHEL-RELATED HOMEOBOX 9, WUSCHEL related homeobox 9A, homeobox-3 | chr2:14342037-14343597 REVERSE LENGTH=388

……省略蛋白序列

观察可知,他们被|分隔开,我们需要借助awk里的split指令。

grep '^>' | awk '{split($0,a,"|"); print a[1]}' input.fa > output.fa

grep '^>' 中 ^ > 指以 > 为开头的行。

awk 中 split($0,a,"|") 中 $0 指这一行(虽然只有一列,可以用$1,但是无所谓啦),以|为分隔符把整一行的字符串分隔成不同元素放入列表a中。

 print a[1]就是打印列表中第一个元素(在python中是a[0],所以我更喜欢linux)。

【 整一句话就是在说 】:抓取以>为开头的行,以|分隔开来,并且打印被分隔后第一个元素,从input.fa中执行这个指令并输入到output.fa中。

你就会得到 output.fa 如下所示

>AT2G17950.1

……省略蛋白序列

>AT2G33880.2

……省略蛋白序列

快去试试吧!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容