【问题标题】:How to remove fasta formatted sequences that contain Ns如何删除包含 Ns 的 fasta 格式序列
【发布时间】:2013-11-13 02:06:55
【问题描述】:

我有一个这样的fasta文件

">ENS..._intronX
acgtacgtacgtacgt
">ENS..._intronY
acgtacgtNNNNa
acgtacgtacgtacgt
">ENS..._intronZ
acgtacgtacgtacgt
acgtacgtacgtacgt

我需要删除连续至少有 2 个N 的序列(因为这些内含子被错误注释了)。

这里应该是序列" >ENS..._intronY "(第3、4、5行应该去掉)

有什么建议吗?

谢谢,

【问题讨论】:

    标签: perl awk fasta


    【解决方案1】:

    awk -v RS='">' '!/NN/{printf $0RT}' file
    ">ENS..._intronX
    acgtacgtacgtacgt
    ">ENS..._intronZ
    acgtacgtacgtacgt
    acgtacgtacgtacgt    
    

    【讨论】:

    • 应该是 N+ 而不是您最初发布的 NNNN?
    • @BugKiller,叹息,ENS 中的 N 导致所有记录都不合格
    • downvoter,我想这与 awk 不是解析 fasta 文件的正确工具有关,但请解释一下
    • OP 的规范要求省略序列包含两个或多个 N 的 fasta 记录。您的脚本不适用于包含(例如)acgtacgtNNa 的序列。此外,fasta 记录以 > 而不是 "> 开头——即使 OP 显示双引号字符。
    • @Kenosis - 第一部分很容易修复,OP 似乎稍后编辑并添加了该细节。关于第二点,很高兴知道,但我不知道关于 fasta 的第一件事就是处理 OP 的样本数据
    【解决方案2】:

    既然您似乎正在研究生物信息学,请考虑熟悉 Bio::SeqIO,因为它会帮助您完成这项工作以及许多其他 fasta 解析工作:

    use strict;
    use warnings;
    use Bio::SeqIO;
    
    my $in = Bio::SeqIO->new( -file => shift, -format => 'Fasta' );
    
    while ( my $seq = $in->next_seq() ) {
        print '>' . $seq->id . ' ' . $seq->desc . "\n" . $seq->seq . "\n"
          if $seq->seq !~ /nn/i;
    }
    

    用法:perl script.pl inFile [>outFile]

    最后一个可选参数将输出定向到文件。

    数据集上的输出:

    >ENS..._intronX 
    acgtacgtacgtacgt
    >ENS..._intronZ 
    acgtacgtacgtacgtacgtacgtacgtacgt
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      相关资源
      最近更新 更多