首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从格式化输出perl中的范围文件中提取区域

从格式化输出perl中的范围文件中提取区域
EN

Stack Overflow用户
提问于 2016-12-08 12:02:15
回答 1查看 61关注 0票数 1

我有这样一个输入和列表文件:

input.txt文件:

代码语言:javascript
运行
复制
>gi|NP_415931.4
MTEQQKLTFTALQQRLDSLMLRDRLRFSRRLHGVKKVKNPDAQQAIFQEMAKEIDQAAGKVLLREAARPEITYPD
>gi|NP_418770.2
MMNKSNFEFLKGVNDFTYAIACAAENNYPDDPNTTLIKMRMFGEATAKHLGLL
>gi|YP_026226.4
MRKFTLNIFTLSLGLAVMPMVEAAPTAQQQLLEQVRLGEATHREDLVQQSLYRLELIDPNNPDVVAARFRSLLRQGDIDGAQKQ

list.txt文件:

代码语言:javascript
运行
复制
NP_415931.4: 1-5, 6-8
YP_026226.4: 3-7, 9-9, 10, 12-15

现在,我想要一个csv格式的output.csv (带有某些添加的头)(对于上面的输入):

代码语言:javascript
运行
复制
ID,Regions,Length,Sequences
NP_415931.4,1-5,5,MTEQQ
,6-8,3,KLT
YP_026226.4,3-7,5,KFTLN
,9-9,1,F
,10,1,T
,12-15,4,SLGL

也就是说,它首先将列表文件头与输入文件头进行匹配,并获取匹配的一次序列,然后给出以上述格式排列的输出。

output.csv的excel视图如下:

如何从这些输入生成上述output.csv文件?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-08 15:03:20

这是一种方法。总结一下:我们有一个包含所有定义序列的主数据库文件input.txt。我们的工作是从这个数据库中提取某些信息并将其写入CSV文件。有关要提取的内容的信息在文件list.txt中给出。

代码语言:javascript
运行
复制
use feature qw(say);
use strict;
use warnings;

my $input_fn = 'input.txt';
open ( my $fh1, '<', $input_fn ) or die "Could not open file '$input_fn': $!";
my %seqs;
while( my $line = <$fh1> ) {
    my ($id ) = $line =~ /gi\|(.*)$/;
    chomp( my $seq = <$fh1> );
    $seqs{$id} = $seq;
}
close $fh1;
say join ',', qw(ID Regions Length Sequences);

my $list_fn = 'list.txt';
open ( my $fh2, '<', $list_fn ) or die "Could not open file '$list_fn': $!";
while( my $line = <$fh2> ) {
    chomp $line;
    my ( $id, @regions ) = split /[:,]\s?/, $line;
    for my $i (0..$#regions) {
        my $region = $regions[$i];
        my $start = my $end = $region;
        if ( $region =~ /(\d+)-(\d+)/ ) {
            $start = $1;
            $end = $2;
        }
        my $name = ($i == 0) ? $id : "";
        my $seq = substr( $seqs{$id}, $start - 1, $end - $start + 1);
        say join ',', $name, $region, length( $seq ), $seq;
    }
}
close $fh2;

输出

代码语言:javascript
运行
复制
ID,Regions,Length,Sequences
NP_415931.4,1-5,5,MTEQQ
,6-8,3,KLT
YP_026226.4,3-7,5,KFTLN
,9-9,1,F
,10,1,T
,12-15,4,SLGL
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41039055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档