免费注册 查看新帖 |

Chinaunix

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

文件提取求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-22 15:52 |只看该作者 |倒序浏览
大家好,我有这样一些数据
# BLASTP 2.2.28+
# Query: AGL000001  locus=Scaffold1:332:538:+
# Database: /home/xuefeil/blastdata/db/lac_pro
# Fields: query acc., subject acc., evalue, alignment length, % identity
# 1 hits found
AGL000001        NC_015428.1_cdsid_YP_004397837.1        5e-16        68        50.00
# BLASTP 2.2.28+
# Query: AGL000002  locus=Scaffold1:660:842:+
# Database: /home/xuefeil/blastdata/db/lac_pro
# 0 hits found
# BLASTP 2.2.28+
# Query: AGL000003  locus=Scaffold1:1026:1379:+
# Database: /home/xuefeil/blastdata/db/lac_pro
# Fields: query acc., subject acc., evalue, alignment length, % identity
# 5 hits found
AGL000003        NC_015428.1_cdsid_YP_004397490.1        3e-05        57        43.86
AGL000003        NC_008530.1_cdsid_YP_815609.1        4e-05        74        29.73
AGL000003        NC_013198.1_cdsid_YP_003172141.1        1e-04        57        40.35
AGL000003        NC_017470.1_cdsid_YP_005854679.1        1e-04        59        35.59
AGL000003        NC_015428.1_cdsid_YP_004397954.1        0.002        81        32.10
# BLASTP 2.2.28+
# Query: AGL000004  locus=Scaffold1:1475:2236:+
# Database: /home/xuefeil/blastdata/db/lac_pro
# Fields: query acc., subject acc., evalue, alignment length, % identity
# 5 hits found
AGL000004        NC_015428.1_cdsid_YP_004399387.1        4e-17        206        31.07
AGL000004        NC_013198.1_cdsid_YP_003172141.1        6e-09        154        32.47
AGL000004        NC_006814.3_cdsid_YP_193465.1        1e-07        114        37.72
AGL000004        NC_015428.1_cdsid_YP_004397490.1        1e-07        234        27.35
AGL000004        NC_015428.1_cdsid_YP_004397954.1        3e-07        147        29.25

想提取含有0 hits found的数据,即得到这样的文件
# BLASTP 2.2.28+
# Query: AGL000002  locus=Scaffold1:660:842:+
# Database: /home/xuefeil/blastdata/db/lac_pro
# 0 hits found
我写了这样的脚本
#!/usr/bin/perl
use strict;
my @ff;
my $item;
open(F1,"< seq1.out") or die "false 1";
open(OUTPUT,'>',"out_file") or die "false 1";
my $f = <F1>;
my $ff = chomp $f;
while ( $ff ) {
push @ff, split /\# BLASTP 2.2.28\+/;
}
foreach $item(@ff) {
chomp;
   if ($item =~ m/# 0 hits/)  {
  print OUTPUT $item;
       }
}
电脑跑不出来,数据有几万条,求大神帮助

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
2 [报告]
发表于 2014-07-22 16:29 |只看该作者
本帖最后由 q1208c 于 2014-07-22 16:29 编辑

第一条, 永远不要使用 $_, 这是我在知道perl有这个默认变量并且被坑了之后, 告诉我自己的.

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
3 [报告]
发表于 2014-07-22 17:09 |只看该作者
没看明白,LZ你说的输出文件中不也前几行不也没有“0 hits found”的字符串嘛???

论坛徽章:
0
4 [报告]
发表于 2014-07-22 18:25 |只看该作者
谢谢你的回复,文件里面是像这样一个一个的记录
# BLASTP 2.2.28+
# Query: AGL000001  locus=Scaffold1:332:538:+
# Database: /home/xuefeil/blastdata/db/lac_pro
# Fields: query acc., subject acc., evalue, alignment length, % identity
# 1 hits found
AGL000001        NC_015428.1_cdsid_YP_004397837.1        5e-16        68        50.00这是一个记录

# BLASTP 2.2.28+
# Query: AGL000002  locus=Scaffold1:660:842:+
# Database: /home/xuefeil/blastdata/db/lac_pro
# 0 hits found
这是第二个记录,每个记录开头为# BLASTP 2.2.28+

想把记录里面含有# 0 hits found的提取出来,如上文第二个记录所示
回复 3# 旋转小马


   

论坛徽章:
0
5 [报告]
发表于 2014-07-22 19:34 |只看该作者
大神能看下我这该怎么解决么,我的代码有什么问题呢回复 2# q1208c


   

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
6 [报告]
发表于 2014-07-22 19:43 |只看该作者
  1. my $f = <F1>;
  2. my $ff = chomp $f;
  3. while ( $ff ) {
  4.     push @ff, split /\# BLASTP 2.2.28\+/;
  5. }
复制代码
$ff 1
while (1) { forever }

论坛徽章:
0
7 [报告]
发表于 2014-07-22 20:00 |只看该作者
确实forever了,求指导,咋搞啊回复 6# substr函数


   

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
8 [报告]
发表于 2014-07-22 20:25 |只看该作者
  1. #!/usr/bin/perl

  2. my @print;
  3. while (<DATA>) {
  4.     next unless /^#/;
  5.     push @print, $_;
  6.     if (/^#\s(\d+)\shits\sfound/) {
  7.         print @print if $1 == 0;
  8.         @print = ();
  9.     }

  10. }

  11. __DATA__
  12. # BLASTP 2.2.28+
  13. # Query: AGL000001  locus=Scaffold1:332:538:+
  14. # Database: /home/xuefeil/blastdata/db/lac_pro
  15. # Fields: query acc., subject acc., evalue, alignment length, % identity
  16. # 1 hits found
  17. AGL000001        NC_015428.1_cdsid_YP_004397837.1        5e-16        68        50.00
  18. # BLASTP 2.2.28+
  19. # Query: AGL000002  locus=Scaffold1:660:842:+
  20. # Database: /home/xuefeil/blastdata/db/lac_pro
  21. # 0 hits found
  22. # BLASTP 2.2.28+
  23. # Query: AGL000003  locus=Scaffold1:1026:1379:+
  24. # Database: /home/xuefeil/blastdata/db/lac_pro
  25. # Fields: query acc., subject acc., evalue, alignment length, % identity
  26. # 5 hits found
  27. AGL000003        NC_015428.1_cdsid_YP_004397490.1        3e-05        57        43.86
  28. AGL000003        NC_008530.1_cdsid_YP_815609.1        4e-05        74        29.73
  29. AGL000003        NC_013198.1_cdsid_YP_003172141.1        1e-04        57        40.35
  30. AGL000003        NC_017470.1_cdsid_YP_005854679.1        1e-04        59        35.59
  31. AGL000003        NC_015428.1_cdsid_YP_004397954.1        0.002        81        32.10
  32. # BLASTP 2.2.28+
  33. # Query: AGL000004  locus=Scaffold1:1475:2236:+
  34. # Database: /home/xuefeil/blastdata/db/lac_pro
  35. # Fields: query acc., subject acc., evalue, alignment length, % identity
  36. # 5 hits found
  37. AGL000004        NC_015428.1_cdsid_YP_004399387.1        4e-17        206        31.07
  38. AGL000004        NC_013198.1_cdsid_YP_003172141.1        6e-09        154        32.47
  39. AGL000004        NC_006814.3_cdsid_YP_193465.1        1e-07        114        37.72
  40. AGL000004        NC_015428.1_cdsid_YP_004397490.1        1e-07        234        27.35
  41. AGL000004        NC_015428.1_cdsid_YP_004397954.1        3e-07        147        29.25
复制代码

论坛徽章:
0
9 [报告]
发表于 2014-07-22 22:29 |只看该作者
真谢谢了,问题解决了 回复 8# substr函数


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP