一句代码快速提取fastq文件中的fasta

NGS数据输出一般为fastq格式,包含序列的质量等信息,有时候我们只想提取fasta序列文件,可以通过多种NGS序列处理软件。此外,可以使用一行代码快速提取。

可以通过两种方式,第一种用sed,第二种用awd,个人觉得第1种sed 命令比较精妙,分享供大家参考:

复习一下典型的fastq文件格式

$ cat test.fq
@ST-E00126:128:HJFLHCCXX:2:1101:7405:1133
TTGCAAAAAATTTCTCTCATTCTGTAGGTTGCCTGTTCACTCTGATGATAGTTTGTTTTGG
+
FFKKKFKKFKF<KK<F,AFKKKKK7FFK77<FKK,<F7K,,7AF<FF7FKK7AA,7<FA,,

使用sed命令

读文献时看到这个命令sed '/^@/!d;s//>/;N',顿时感到太精妙了,忍不住分享一下:

$ sed '/^@/!d;s//>/;N'  test.fq 
>ST-E00126:128:HJFLHCCXX:2:1101:7405:1133
TTGCAAAAAATTTCTCTCATTCTGTAGGTTGCCTGTTCACTCTGATGATAGTTTGTTTTGG

想要理解这个命令,首先需要理解sed 中N的用法:

N命令

N命令的介绍来自SED 简明教程,想详细了解sed的可以看看这篇文章

先来看N命令 —— 把下一行的内容纳入当成缓冲区做匹配。

演示文本为pets.text:

$ cat pets.txt
This is my cat
  my cat's name is betty
This is my dog
  my dog's name is frank
This is my fish
  my fish's name is george
This is my goat
  my goat's name is adam

下面的的示例会把原文本中的偶数行纳入奇数行匹配,而s只匹配并替换一次,所以,就成了下面的结果:

$ sed 'N;s/my/your/' pets.txt
This is your cat
  my cat's name is betty
This is your dog
  my dog's name is frank
This is your fish
  my fish's name is george
This is your goat
  my goat's name is adam

也就是说,原来的文件成了:

This is my cat\n  my cat's name is betty
This is my dog\n  my dog's name is frank
This is my fish\n  my fish's name is george
This is my goat\n  my goat's name is adam

这样一来,下面的例子你就明白了,

$ sed 'N;s/\n/,/' pets.txt
This is my cat,  my cat's name is betty
This is my dog,  my dog's name is frank
This is my fish,  my fish's name is george
This is my goat,  my goat's name is adam

这样,在命令sed '/^@/!d;s//>/;N' test.fq中,首先使/^@/’ 匹配开头为@的行,就是第一行,后面加了N就是说把开头@行和后面一行(序列行)算成1行,然后用/!反向匹配,即匹配开头是@行以外的行,d是删除,所以/^@/!d;N 这部分代码就是说把第一行第二行当成一行匹配,之外的行的全部删除,就是说原文件第3,4行被删除。然后s//>/将剩余的第一第二行中匹配的^@替换成">"。所以这一个命令使用了正则表达式(^),sed 命令连用(;)反向匹配符号(!),还有sed 的N命令。

2. 第二个是使用awk命令,比较常规

$ awk '{if(FNR%4==1){sub("@",">",$0);print $0};if(FNR%4==2)print$0}' test.fq 
>ST-E00126:128:HJFLHCCXX:2:1101:7405:1133
TTGCAAAAAATTTCTCTCATTCTGTAGGTTGCCTGTTCACTCTGATGATAGTTTGTTTTGG
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值