【问题标题】:How to keep only the 2nd field of a line and print this line and the following line?如何只保留一行的第二个字段并打印这一行和下一行?
【发布时间】:2023-02-21 20:49:34
【问题描述】:

我有一个包含两行的 fasta 格式的文件:

  • 以符号开头的第一行>
  • 带有字母的第二行。 我只想保留第一行的第二个字段(逗号分隔符)并保持第二行不变。

我不知道使用什么简单的命令?你能帮助我吗 ?

输入

>TRINITY_DN80808_c0_g1,TRINITY_DN80808_c0_g1_i1,g.1,m.1 type:internal len:692 gc:universal TRINITY_DN80808_c0_g1_i1:2-2074(+)
LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
>TRINITY_DN80808_c0_g2,TRINITY_DN80808_c0_g2_i1,g.2,m.2 type:5prime_partial len:329 gc:universal TRINITY_DN80808_c0_g2_i1:2-988(+)
LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI

期望的输出

>TRINITY_DN80808_c0_g1_i1
LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
>TRINITY_DN80808_c0_g2_i1
LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI

【问题讨论】:

    标签: linux bash fasta


    【解决方案1】:

    您可以简单地定位以 > 开头的行:

    awk -F ',' '/^>/ { $0 = ">" $2 } 1' file.fasta
    

    输出:

    >TRINITY_DN80808_c0_g1_i1
    LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
    >TRINITY_DN80808_c0_g2_i1
    LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI
    

    【讨论】:

      【解决方案2】:
      awk -F',' 'NR % 2 { $0 = ">"$2 } { print }' input_file
      
      • 将分隔符设置为逗号 (-F',')
      • NR % 2 仅在 ODD 行上执行以下操作
        • { $0 = ">"$2 } 将行设置为 '> + whats in栏 2'
      • { print }打印完整结果
      • input_file 输入文件的路径

      输出:

      >TRINITY_DN80808_c0_g1_i1
      LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
      >TRINITY_DN80808_c0_g2_i1
      LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI
      

      【讨论】:

        【解决方案3】:
        $ awk -F',' '$0=(/^>/ ? ">" $2 : $0)' input
        $ awk '$0=gensub(/^>([^,]*),([^,]*),(.*)/,">\2",1)' input
        
        >TRINITY_DN80808_c0_g1_i1
        LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
        >TRINITY_DN80808_c0_g2_i1
        LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI
        

        【讨论】:

          【解决方案4】:

          你可以使用 sed代替命令并仅在以右尖括号开头的行上应用替换:

          sed '/^>/s/,.*//' file.fasta
          

          演示:

          $ sed '/^>/s/,.*//' <<FASTA
          >TRINITY_DN80808_c0_g1,TRINITY_DN80808_c0_g1_i1,g.1,m.1 type:internal len:692 gc:universal TRINITY_DN80808_c0_g1_i1:2-2074(+)
          LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
          >TRINITY_DN80808_c0_g2,TRINITY_DN80808_c0_g2_i1,g.2,m.2 type:5prime_partial len:329 gc:universal TRINITY_DN80808_c0_g2_i1:2-988(+)
          LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSMKLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI
          FASTA
          >TRINITY_DN80808_c0_g1
          LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
          >TRINITY_DN80808_c0_g2
          LTLGRFATRLSDLFLVVGVSTSLILNPRVSNGGIFYTFAVEFYGSM>TRINITY_DN80808_c0_g1
          KLQILHKTTVEEVPGAVLTFQGRIVAGVGNLLRVYEMGKQKLLRKCENKRIPSLI
          LDSGALVQIHSNGIKHISDRVYEWVSDGIITHCACNPRQIVIATTNEIIYFELDINGQLNEYSERREMPAQVQAMALGPIPPSQVRSRFLAVTLSDQTVRIVSLDPQDCLQPLSMQALPATAESVCIIEASFGDDTYDTSLYLNIGLKNGVLLRTSLDSVTGDLSDTRTRYLGSKPVKLFRVIIANCPAILAVSSRSWLCYY
          

          【讨论】:

            猜你喜欢
            • 2018-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-16
            • 2020-03-28
            • 1970-01-01
            • 2016-10-28
            • 1970-01-01
            相关资源
            最近更新 更多