如何将fasta格式转换为fastq格式?

发布于 2022-10-15 09:25:10 字数 941 浏览 24 评论 0

新手入门,如何将fasta格式转换为fastq格式,求perl具体编程,非常感谢!希望有好心人多多指点,这个问题已困恼了本人很久,都失去了学习perl的信心了!
例如,一段序列
">NG-5065_R-0-18_1_1_1_5_743/1
AACAAACCAACAAACNCTAACAAACCCTTTCCGNTTCCANAAANTNTNCNNNNAANNCNNNNGNCANNNCNAANAN
>NG-5065_R-0-18_1_1_1_5_1184/1
TTCGAAGGCCTTCCCGGCACGACGAACGGATGTCCAATTGGTTTCGTAGTAGTGTCANNNNNNNNTCGATCANGACA";
该序列存放在一个文件example中,
其对应的序列质量为
+NG-5065_R-0-18_1_1_1_5_743/1
22 34 32 32 28 32 32 32 30 32 32 31 26 33 30 4 29 34 34 34 32 29 32 25 33 33 30 33 34 34 31 28 29 4 29 34 33 34 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+NG-5065_R-0-18_1_1_1_5_1184/1
33 23 29 21 32 32 32 32 25 31 33 28 26 31 14 4 19 33 33 32 30 25 28 32 22 10 11 9 28 32 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
以上存放在另外一个文件example2中,
我该如何用perl编程,实现fasta到fastq格式转换?拜谢!!{:3_199:}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

相权↑美人 2022-10-22 09:25:10

能说明一下example2的格式吗?
22 34 32 32 28 32 32 32 30 32 32 31 26 33 30 4 29 34 34 34 32 29 32 25 33 33 30 33 34 34 31 28 29 4 29 34 33 34 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
这里是一行数据(quality values)还是两行数据?
Bio::Seq::Quality与Bio::SeqIO两个模块合并使用应该能解决你的问题,但我对fastq格式不熟。

笑梦风尘 2022-10-22 09:25:10

回复 2# aef25u

    能不用模块么?我在网上找了很多,都是用模块的,可是作为新手,还没有学习模块的使用

欲拥i 2022-10-22 09:25:10

本帖最后由 aef25u 于 2011-04-16 16:37 编辑

回复 3# 一抹茶123

还是学一下模块吧,不用模块能解决吗?能解释一下example2的格式吗?
问楼主也不帮解释下,我把example2当一行的quality values数据处理了。

  1. #!/usr/bin/perl
  2. use Bio::SeqIO;
  3. $in  = Bio::SeqIO->new( -format => 'fasta', -file => 'example.ta' );
  4. $out = Bio::SeqIO->new( -format => 'fastq', -file => '>out' );
  5. while ( my $seq = $in->next_seq ) {
  6.     my $id_ta  = $seq->id;
  7.     my $seq_ta = $seq->seq;
  8.     my $hash   = Qual('example2.txt');
  9.     my $seq_tq = Bio::Seq::Quality->new(
  10.         -qual => $hash->{$id_ta},
  11.         -seq => $seq_ta,
  12.         -id  => $id_ta,
  13.         #-trace_indices => $trace,
  14.         #-accession_number => '',
  15.         #-verbose => -1   # to silence deprecated methods
  16.     );
  17.     $out->write_seq($seq_tq);
  18. }
  19. sub Qual {
  20.     my $file = shift;
  21.     local $/ = '+';
  22.     open my $FH, "<$file";
  23.     my %hash;
  24.     while ( my $line = <$FH> ) {
  25.         my ( $id, $q1, $q2 ) = split( "\n", $line );
  26.         my $qual = $q1 . ' ' . $q2;
  27.         $hash{$id} = $qual;
  28.     }
  29.     close $FH;
  30.     return \%hash;
  31. }

复制代码

心作怪 2022-10-22 09:25:10

不懂,不过给你个网址 你可以作为 参考。里面有高手写的代码

http://club.topsage.com/thread-2229946-1-1.html

念﹏祤嫣 2022-10-22 09:25:10

楼主,请注意你的fasta格式文件和Phred格式文件,他们的序列ID是一样的。

>NG-5065_R-0-18_1_1_1_5_743/1
>NG-5065_R-0-18_1_1_1_5_1184/1

+NG-5065_R-0-18_1_1_1_5_743/1
+NG-5065_R-0-18_1_1_1_5_1184/1

所不同的只是一个一个用>,一个用+

这些ID应该是不重复的,你只需要用这个做ID,建两个hash,然后print就好了..

淡淡绿茶香 2022-10-22 09:25:10

fastq格式的文件,他们的quality score格式很多,楼主需要注意软件支持的格式,记得我做tophat还是什么的时候就没注意.....囧

苍暮颜 2022-10-22 09:25:10

回复 2# aef25u

    猜测就是一行的,因为对应的fasta文件就是一行:)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文