使用包含递增值的新名称编辑行名称

时间:2015-06-10 19:36:09

标签: regex perl awk sed fasta

这对我来说似乎是一项简单的任务,但是让它轻松上班最终会比我想象的更难:

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

示例输入序列名称:

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

然后我想输出这样的

>Contig 1
ATGTCGATGCGT
>Contig 2
ATGCGCTTACAC

所以也许是Perl脚本?我知道一些基础知识,但我想读一个文件然后输出新文件的变化,我不确定最好的方法吗?我看过Perl的一些衬垫示例,但没有一个做我想要的。

$n = 1

if { 

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

    ++$n
}

5 个答案:

答案 0 :(得分:1)

$ awk '/^\\>/{$0="\\>Contig "++n} 1' file
\>Contig 1

ATGTCGATGCGT

\>Contig 2

ATGCGCTTACAC

答案 1 :(得分:0)

尝试这样的事情:

<div id="reg_mem_type" class="form-row form-row-wide"> <label for="reg_mem_type">'Member Type' </label>
    <select id="reg_mem_type" name="mem_type" value="'.esc_attr($_POST['mem_type']).'">
      <option value="ARENA">ARENA</option>
      <option value="ARO">ARO</option>
      <option value="BUILD">BUILD</option>
      <option value="RM">RM</option>
      <option value="CLUBINS">CLUBINS</option>
      <option value="AFFL">AFFL</option>
      <option value="HOCKEY">HOCKEY</option>
      <option value="HOCKEYA">HOCKEYA</option>
      <option value="PRO">PRO</option>
      <option value="SKATER">SKATER</option>
      <option value="WE">WE</option>
      <option value="LINS">LINS</option>
      <option selected disabled value="Member">Member Type</option>
    </select>
  </div>



<div class="member-type bs-member-type form-row form-row-wide"> <h2>personal info</h2></div>
<div class="member-type bs-member-type form-row form-row-wide"><label for="reg_first_name">'.__('First Name', 'woocommerce').'</label>
<input type="text" class="input-text" name="first_name" id="reg_first_name" size="10" value" '.esc_attr($_POST['first_name']).'" /></div>
<div class="member-type bs-member-type form-row form-row-wide"><label     for="reg_last_name">'.__('Last Name', 'woocommerce').'</label>
<input type="text" class=" input-text" name="last_name" id="reg_last_name"     size="10" value" '.esc_attr($_POST['last_name']).'" /></div>
<div class="arena-member-type bs-member-type form-row form-row-wide">     <h2>company info</h2></div>
<div class="bs-member-type arena-member-type form-row form-row-wide"> <label    for="reg_website">'.__('Website' , 'woocommerce').'</label>
<input type="text" class="input-text" name="website" id="reg_website" value"     '.esc_attr($_POST['website']).'"/></div>
<div class="arena-member-type bs-member-type form-row form-row-wide">     <label for="reg_fax">'.__('Fax' , 'woocommerce').'</label>
<input type="text" class="input-text" name="fax_num" id="reg_fax" value"     '.esc_attr($_POST['fax_num']).'"/></div>

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

perl -i -pe 's/>.*/">Contig " . ++$c/e;' file.txt

输出:

\>Contig 1
ATGTCGATGCGT
\>Contig 2
ATGCGCTTACAC

答案 4 :(得分:0)

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

这样的东西
s/>.*/">Contig " . ++$n/e