【问题标题】:Edit line names with a new name containing an incremented value使用包含递增值的新名称编辑行名称
【发布时间】:2015-06-12 12:34:16
【问题描述】:

这对我来说似乎是一项简单的任务,但让它轻松工作最终比我想象的要困难:

我有一个包含几百万行文本(只有几百个单独的序列条目)的 fasta 文件,这些序列名称很长,我想用 Contig $n 替换标题 > 之后的所有字符,其中 @987654323 @ 是一个从 1 开始的整数,每次替换都会递增。

一个示例输入序列名称:

>NODE:345643RD:Cov_456:GC47:34thgd
ATGTCGATGCGT
>NODE...
ATGCGCTTACAC

然后我想像这样输出

>Contig 1
ATGTCGATGCGT
>Contig 2
ATGCGCTTACAC

所以也许是 Perl 脚本?我知道一些基础知识,但我想读入一个文件,然后输出带有更改的新文件,我不确定最好的方法是什么?我看过一些 Perl one liner 示例,但没有一个符合我的要求。

$n = 1

if { 

    s/>.*/(Contig)++$n/e

    ++$n
}

【问题讨论】:

  • 标题行是否真的以反斜杠开头,并且每隔一行都是这样的空白?
  • 不,我遇到了问题,浏览器一直认为我在输入代码,行以“>”符号开头并且没有空行。

标签: regex perl awk sed fasta


【解决方案1】:
$ awk '/^\\>/{$0="\\>Contig "++n} 1' file
\>Contig 1

ATGTCGATGCGT

\>Contig 2

ATGCGCTTACAC

【讨论】:

    【解决方案2】:

    试试这样的:

    #!/usr/bin/perl -w
    
    use strict;
    
    open (my $fh, '<','example.txt');
    open (my $fh1, '>','example2.txt');
    
    my $n = 1;
    
    # For each line of the input file
    while(<$fh>) {
    
        # Try to update the name, if successful, increment $n
        if ($_ =~ s/^>.*/>Contig$n/) { $n++; }
    
        print $fh1 $_;
    }
    

    【讨论】:

      【解决方案3】:

      当您使用/e 修饰符时,Perl 期望替换模式是有效的 Perl 表达式。尝试类似

      s/>.*/">Contig " . ++$n/e
      

      【讨论】:

        【解决方案4】:
        perl -i -pe 's/>.*/">Contig " . ++$c/e;' file.txt
        

        输出:

        \>Contig 1
        ATGTCGATGCGT
        \>Contig 2
        ATGCGCTTACAC
        

        【讨论】:

        • 虽然这个答案可能是正确且有用的,但最好在其中附上一些解释来解释它如何帮助解决问题。如果有更改(可能不相关)导致它停止工作并且用户需要了解它曾经是如何工作的,这在未来变得特别有用。
        • 可以理解,我正在解析基因组组装算法的一些输出,该算法创建了具有复杂长名称的序列重叠群。这些复杂的序列名称混淆了我用来注释序列的另一种算法,因此我将名称转换为更简单的名称。
        【解决方案5】:

        我不是 awk 专家(远非如此),但解决这个问题只是出于好奇,因为 sed 不包含变量(可能性有限)。

        一种可能的 gawk 解决方案可能是

        awk -v n=1 '/^>/{print ">Contig " n; n++; next}1' <file
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-14
          相关资源
          最近更新 更多