免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2158 | 回复: 4
打印 上一主题 下一主题

小白求指点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-08-21 11:23 |只看该作者 |倒序浏览
大家好!我想根据一列ID,从一个总文件中提取匹配这个ID的信息,比如:
ID文件:
AAA1
CCC2
DDD3
总文件:
>Tar AAA1|test  pp
QQQQQQ
QQ
>AAA2_test
QQQQQQQQQQ
>test|DDD3  ID:777
QQQQQQQ
QQQQQQ
QQQQQ
得到:
>Tar AAA1|test  pp
QQQQQQ
QQ
>test|DDD3  ID:777
QQQQQQQ
QQQQQQ
QQQQQ
下边是我的脚本,但是总文件ID情况并不是刚刚好一样,需要匹配,不知道这里怎么写了,求大神指点!

my $list = shift @ARGV;
my $fasta = shift @ARGV;
my $out = shift @ARGV;
my %select;
open L, "$list" or die;
while (<L>) {
    chomp;
    s/>//g;
    $select{$_} = 1;
}
close L;

$/ = "\n>";
open O, ">$out" or die;
open F, "$fasta" or die;
while (<F>) {
    s/>//g;
    my ($id) = split (/\n/, $_);
    print O ">$_" if (defined $select{$id});
}
close F;
close O;

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
2 [报告]
发表于 2017-08-21 12:20 |只看该作者

  1. awk 'NR==FNR{a[$1];next}/>/{f=0;for(i in a)if(index($0,i)){f=1;break}}f' id.txt data.txt
复制代码

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
3 [报告]
发表于 2017-08-21 21:27 |只看该作者
看不懂需求,ID信息出现在 TAR 命令后,还可能出现在管道符号 | 后,直到下一个 > 命令提示符出现吗?

论坛徽章:
0
4 [报告]
发表于 2017-08-23 10:56 |只看该作者
回复 3# 104359176

对对,>符号是固定的一行,后面跟的一串信息包含里包含ID

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2017-08-23 11:50 |只看该作者
回复 1# Eva326

$ perl get_fasta_id_list.pl
Usage  : get_fasta_id_list.pl ID_LIST FASTA_FILE OUTPUT
Example: get_fasta_id_list.pl id.txt  a.fas  out.fas  


$ perl get_fasta_id_list.pl id.txt a.fas out.fas
Output file: out.fas

$ cat id.txt
AAA1
CCC2
DDD3

$ cat a.fas
>Tar AAA1|test  pp
QQQQQQ
QQ
>AAA2_test
QQQQQQQQQQ
>test|DDD3  ID:777
QQQQQQQ
QQQQQQ
QQQQQ

$ cat out.fas
>Tar AAA1|test  pp
QQQQQQ
QQ
>test|DDD3  ID:777
QQQQQQQ
QQQQQQ
QQQQQ



$ cat get_fasta_id_list.pl

use strict;
use warnings;

sub message{
  print <<EOF;
Usage  : $0 ID_LIST FASTA_FILE OUTPUT
Example: $0 id.txt  a.fas  out.fas  

EOF
  exit 1;
}

message() if(@ARGV != 3);
my ($Fid, $Ffas, $Fout) = @ARGV;
open(FHid,  "<", "$Fid")  or die "cannot open $Fid\n";
open(FHfas, "<", "$Ffas") or die "cannot open $Ffas\n";
open(FHout, ">", "$Fout") or die "cannot open $Fout\n";

my $sRE ="\\b(";
while (<FHid>) {
    chomp;
    s/>//g;
    $sRE .= "$_|";
}
close FHid;
$sRE =~ s/[|]$/)\\b/;

my $sMatch = 0;
while (<FHfas>) {
    if(m/^>/){
      $sMatch = m/$sRE/? 1: 0;
    }
    if($sMatch){
      print FHout "$_";
    }
   
}
close FHfas;
close FHout;
print "Output file: $Fout\n";

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP