perl序列提取循环

时间:2013-01-08 00:02:06

标签: perl shell bioinformatics fasta

我有一个现有的perl单线程(来自Edwards实验室)可以很好地读取包含一个 ID列的文本文件(名为ids.file)并搜索第二个,特殊格式的文本文件(在此示例中名为fasta.file - 以“fasta”格式为知道生物信息学的人提供)并返回与第一个文件中的ID匹配的序列。我希望扩展这个脚本以做另外两件事:

  1. 如果ids.file包含一列数据,则当前的perl one-liner 似乎有效。我希望它能够处理一个包含两列(用空格分隔)的文件,并对第二列数据进行操作(好吧,实际上是任何数据列,但我认为如果有人,它会很明显地适应它可以使用第二列提供示例)
  2. 我想将搜索输出返回的任何结果附加到第三列,而不只是附加到新文件。
  3. 如果有人善于提供一个例子,但只有时间或倾向于处理其中一个,我宁愿你尝试解决#2 - 我已经接近用一个for循环来解决#1 awk只在第二列上使用Perl代码 - 我还没有得到它,但我很接近,所以#2对我来说似乎更难。

    perl one liner如下:

    perl -ne 'if(/^>(\S+)/){$c=$i{$1}}$c?print:chomp;$i{$_}=1 if @ARGV' ids.file fasta.file
    

    我感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:2)

不太确定,但这会吗?

perl -ne 'chomp; s/^>(\S+).*/$c=$i{$1}/e; print if $c; 
    $i{(/^\S*\s(\S*)$/)[0]}="$_ " if @ARGV' 
  ids.file fasta.file