【问题标题】:get a specific sequence from a fasta file with Regex使用正则表达式从 fasta 文件中获取特定序列
【发布时间】:2013-07-01 01:51:56
【问题描述】:

我想从输入 fasta 文件中检索第 nth 序列(或者最好是从 nth 到 mth 序列),理想情况下使用 unix“单线”。

我知道我可以用 perl(或任何其他脚本语言)读取序列,计数,然后打印序列,但我正在寻找更快、更紧凑的东西。

对于那些不知道的人,示例 fasta 文件如下所示:

>SEQUENCE_1
MTEITAAMVKELRESTGAGMMDCKNALSETNGDFDKAVQLLREKGLGKAAKKADRLAAEG
LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK
IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL
MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGLEKKTEDFAAEVAAQL
>SEQUENCE_2
SATVSEINSETDFVAKNDQFIALTKDTTAHIQSNSLQSVEELHSSTINGVKFEEYLKSQI
ATIGENLVVRRFATLKAGANGVVNGYIHTNGRVGVVIAAACDSAEVASKSRDLLRQICMH

【问题讨论】:

  • 您能否更新问题以准确反映您正在寻找的内容?像这样的东西是我想要的输出,这是我尝试过的。
  • @Endoro 抱歉,如果不清楚。如果我在 fasta 文件中有 10 个序列并且想要检索第 5 个序列,那么 n 将是 5。我需要标题(以 > 开头)和它下面的行,直到下一个 >,它标记下一个序列。这有帮助吗?

标签: regex perl sed awk fasta


【解决方案1】:

awk 的一种方式:

awk -v RS='>' -v start=$n -v end=$m 'NR>=(start+1)&&NR<=(end+1){print ">"$0}' fasta_file

【讨论】:

    【解决方案2】:

    这里有两种使用awk的方法。

    如果您的序列每行包装 1 个,这将起作用:

    awk -v n=5 -v m=8 'NR == n * 2 - 1, NR == m * 2' file.fa
    

    如果您的序列行没有被换行,那么这可能更合适:

    awk -v n=5 -v m=8 '/^>/ { c++ } c == n { f=1 } c == m + 1 { f=0 } f' file.fa
    

    【讨论】:

      【解决方案3】:

      sed:

      sed -n '/SEQUENCE_'$n'/,/SEQUENCE_'$(($m + 1))'/p' input | sed '$d'
      

      【讨论】:

        【解决方案4】:

        一个内胆(无需管道|):

        sed '/>SEQUENCE_'$n'/, />SEQUENCE_'$(($m + 1))'/!d;{/>SEQUENCE_'$(($m + 1))'/d}' file
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多