【问题标题】:Replace headers of a multi fasta file awk替换多 fasta 文件 awk 的标题
【发布时间】:2018-12-05 21:18:21
【问题描述】:

我正在尝试使用 awk 更改多 fasta 文件的标题。

我的文件如下:

>NS500106:288:HGHTHAFXY:1:11101:16650:2011:CTATAC;size=206083;
GTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
>NS500106:288:HGHTHAFXY:1:11101:1149:1903:CTATAC;size=19175;
CAGCGAGAGCGAGACGCAGCCGGTGAACCGCGTGGCGTACAACGTCGGCGGGCAGATGGCCACCAACAACCAGAGCTCCA
CCACTGCCCCCGCGACCGGCACGTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG

我正在使用这个命令:

awk '/[^;]*/{print "Variant_" ++i; next} {print}' < input.fasta > output.fasta

其中,/[^;]*/ 匹配直到第一次出现分号的行,并将标题的匹配部分替换为 Variant_1、Variant_2 等。

上述命令将整个标题更改为 Variant_1 等等,并且也不打印序列行。

我该如何解决这个问题?

我想要的输出如下:

Variant_1;size=206083;
GTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
Variant_2;size=19175;
CAGCGAGAGCGAGACGCAGCCGGTGAACCGCGTGGCGTACAACGTCGGCGGGCAGATGGCCACCAACAACCAGAGCTCCA
CCACTGCCCCCGCGACCGGCACGTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    其中,/[^;]*/ 匹配直到第一次出现分号的行,并用 Variant_1、Variant_2 等替换标题的匹配部分。

    不,这是错误的。它处理包含零个或多个非分号字符的行(例如所有行)并打印Variant_n 其中n 是行号。 {print} 部分永远无法到达。

    这是我的方法:

    $ awk 'BEGIN{FS=OFS=";"}NF>1{$1="Variant_"++i}1' file
    Variant_1;size=206083;
    GTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
    Variant_2;size=19175;
    CAGCGAGAGCGAGACGCAGCCGGTGAACCGCGTGGCGTACAACGTCGGCGGGCAGATGGCCACCAACAACCAGAGCTCCA
    CCACTGCCCCCGCGACCGGCACGTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
    

    【讨论】:

      【解决方案2】:

      你可以试试:

      >> awk '/>.*/{sub(/[^;]*/,"Variant_" ++i )}1' < input.fasta  
      
      Variant_1;size=206083;
      GTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
      Variant_2;size=19175;
      CAGCGAGAGCGAGACGCAGCCGGTGAACCGCGTGGCGTACAACGTCGGCGGGCAGATGGCCACCAACAACCAGAGCTCCA
      CCACTGCCCCCGCGACCGGCACGTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
      

      您尝试删除所有行,在这种情况下,sub 解决了该问题

      【讨论】:

        【解决方案3】:

        检查这个 Perl-one 班轮

        $ cat callie.txt
        >NS500106:288:HGHTHAFXY:1:11101:16650:2011:CTATAC;size=206083;
        GTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
        >NS500106:288:HGHTHAFXY:1:11101:1149:1903:CTATAC;size=19175;
        CAGCGAGAGCGAGACGCAGCCGGTGAACCGCGTGGCGTACAACGTCGGCGGGCAGATGGCCACCAACAACCAGAGCTCCA
        CCACTGCCCCCGCGACCGGCACGTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
        
        $ perl -ne ' BEGIN {$x=1} { s/(.*?);/"Variant_${x};"/e and $x++ ; print }' callie.txt
        Variant_1;size=206083;
        GTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
        Variant_2;size=19175;
        CAGCGAGAGCGAGACGCAGCCGGTGAACCGCGTGGCGTACAACGTCGGCGGGCAGATGGCCACCAACAACCAGAGCTCCA
        CCACTGCCCCCGCGACCGGCACGTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
        
        $
        

        更短

        $ perl -pe ' { s/(.*?);/sprintf("Variant_%d;",++$x)/e; }' callie.txt
        Variant_1;size=206083;
        GTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
        Variant_2;size=19175;
        CAGCGAGAGCGAGACGCAGCCGGTGAACCGCGTGGCGTACAACGTCGGCGGGCAGATGGCCACCAACAACCAGAGCTCCA
        CCACTGCCCCCGCGACCGGCACGTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
        
        $
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-29
          • 1970-01-01
          • 2016-04-04
          • 1970-01-01
          • 1970-01-01
          • 2019-01-08
          相关资源
          最近更新 更多