【问题标题】:How to add substring to some (not all) fasta headers如何将子字符串添加到某些(不是全部)fasta 标头
【发布时间】:2021-01-27 06:38:47
【问题描述】:

我有一个如下所示的 fasta 文件:

>miR-92|LQNS02278089.1_34108_3p  Parhyale hawaiensis 34108_3p 
AATTGCACTCGTCCCGGCCTGC
>miR-92|LQNS02278089.1_34106_3p  Parhyale hawaiensis 34106_3p 
AATTGCACTGATCCCGGCCTGC
>LQNS02136402.1_14821_5p  Parhyale hawaiensis 14821_5p 
CCGTAAGGCCGAAGACAAGAA
>LQNS02278094.1_35771_5p  Parhyale hawaiensis 35771_5p 
AAGAATAAGCCCGAGCAAGTCGAT

我想更改标题,使它们看起来像这样:

>miR-92|LQNS02278089.1_34108_3p  Parhyale hawaiensis 34108_3p 
AATTGCACTCGTCCCGGCCTGC
>miR-92|LQNS02278089.1_34106_3p  Parhyale hawaiensis 34106_3p 
AATTGCACTGATCCCGGCCTGC
>miR-LQNS02136402.1_14821_5p  Parhyale hawaiensis 14821_5p 
CCGTAAGGCCGAAGACAAGAA
>miR-LQNS02278094.1_35771_5p  Parhyale hawaiensis 35771_5p 
AAGAATAAGCCCGAGCAAGTCGAT

请注意,并非所有标题都发生了变化,只是示例中的最后 2 个,其中添加了单词“miRs”。 到目前为止,我一直在这样做: perl -p -e "s/^>/>miR-/g" seq.fasta 但这最终会导致一些 ID 添加了 miR-,即使他们已经拥有它。

我知道我可以对文件进行子集化并将其应用于仅在开头缺少 miR- 的文件,然后重新合并,但我想找到一种更简单的方法来在一行中完成此操作,而无需太多人工干预。

【问题讨论】:

    标签: shell perl awk sed fasta


    【解决方案1】:

    使用awk可以获得没有miR的记录:

    awk '$0 !~ /miR-/ && $0 ~ /^>/'  file
    >LQNS02136402.1_14821_5p  Parhyale hawaiensis 14821_5p
    >LQNS02278094.1_35771_5p  Parhyale hawaiensis 35771_5p
    

    然后将miR 仅放在这些记录中:

    awk '$0 !~ /miR-/ && $0 ~ /^>/ {gsub(/^>/, ">miR-")} 1' file
    >miR-92|LQNS02278089.1_34108_3p  Parhyale hawaiensis 34108_3p
    AATTGCACTCGTCCCGGCCTGC
    >miR-92|LQNS02278089.1_34106_3p  Parhyale hawaiensis 34106_3p
    AATTGCACTGATCCCGGCCTGC
    >miR-LQNS02136402.1_14821_5p  Parhyale hawaiensis 14821_5p
    CCGTAAGGCCGAAGACAAGAA
    >miR-LQNS02278094.1_35771_5p  Parhyale hawaiensis 35771_5p
    AAGAATAAGCCCGAGCAAGTCGA
    

    【讨论】:

      【解决方案2】:

      你也可以用sed说:

      sed -E "s/^>(miR-)?/>miR-/" seq.fasta
      

      【讨论】:

        【解决方案3】:

        您可以负前瞻以仅匹配以> 开头但后面不跟miR- 的行。注意单引号。

        perl -p -e 's/^>(?!miR-)/>miR-/g' file
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-10
          • 2015-09-09
          • 1970-01-01
          • 2013-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多