【问题标题】:how to merge lines that do not begin with certain character如何合并不以特定字符开头的行
【发布时间】:2016-09-28 10:49:33
【问题描述】:

如果我有以下情况:

>A13P0
ACCATAGAGAG
CCCGAGATTTA
>03HK2
ACACAGTGTGT
TTAGAGGGAGA

如何合并不以> 开头的行?

>A13P0
ACCATAGAGAGCCCGAGATTTA
>03HK2
ACACAGTGTGTTTAGAGGGAGA

谢谢!

【问题讨论】:

    标签: bash perl awk sed tr


    【解决方案1】:
    perl -ne'
       if (/^>/) {
          print("\n") if $. != 1;
       } else {
          chomp;
       }
       print;
    } {
       print("\n") if $. != 1;
    '
    

    用法见Specifying file to process to Perl one-liner

    【讨论】:

    • 也许你应该准确地说这是 Perl。
    • @Ed Morton,将 chomp; 替换为 s/\s+\z//; 将导致它同时接受 CRLF 和 LF。
    【解决方案2】:

    我知道这已经被问/回答了一千次,但我找不到它:

    $ awk '/^>/{print (NR>1?ORS:"") $0; next} {printf "%s", $0} END{print ""}' file
    >A13P0
    ACCATAGAGAGCCCGAGATTTA
    >03HK2
    ACACAGTGTGTTTAGAGGGAGA
    

    【讨论】:

      【解决方案3】:

      使用 perl 命令行:

      perl -pE '$.>1 && !s/^>/\n>/ && chomp; END{say}' file
      

      【讨论】:

        【解决方案4】:

        使用 sed :

        $ sed ':a;$!N;/>/!{s/\n\([^>]\)/\1/;ta};P;D' file
        >A13P0
        ACCATAGAGAGCCCGAGATTTA
        >03HK2
        ACACAGTGTGTTTAGAGGGAGA
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-20
          • 2021-05-01
          • 2021-05-25
          • 2013-09-26
          • 2011-08-12
          • 2017-01-16
          • 1970-01-01
          • 2015-05-08
          相关资源
          最近更新 更多