免费注册 查看新帖 |

Chinaunix

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

求大神指导~~~一个小脚本 为什么运行的这么慢 [复制链接]

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-20 14:31 |只看该作者 |倒序浏览
写了一个很短的小脚本,处理序列比对结果用的,不知道为什么跑起来非常慢,输入的文本文件大概1G左右,跑了4个小时也没有出结果,求指导,万分感谢!!
脚本如下:
#!/usr/bin/perl -w
open IN, "<$ARGV[0]" or die "$!";
<IN>;
while(<IN>){
    chomp;
    @tmp=split(/\s+/,$_);
    $va=$tmp[4]."\t".$tmp[0]."\t".$tmp[2];
    if(!exists $hash{$tmp[3]}){
        $hash{$tmp[3]}=$va;
    }else{
        $hash{$tmp[3]}=$hash{$tmp[3]}."\n".$va;
    }
}

foreach $key(keys %hash){
    print ">$key\n$hash{$key}\n";
}

输入文件格式如下:
trans_id        trans_coord     target_seq      probe_id        probe_seq       num_mismatch    strand
ch139708    294     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122612_h       TTGCAGGAAAACAAGCTTAAGACGCCCAC   1       +
ch139708    294     TTGCAGGAAAACAAGCTTAACACGCCCACT  n122613_h       TTGCAGGAAAACAAGCTTAACATGCCCACT  1       +
ch139708    294     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122614_h       TTGCAGGAAAACAAGCTTAACATGCCCAC   1       +
ch139708    294     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122615_h       TTGCAGGAAAACAAGCTTAACACGCCCAC   0       +
ch321020    295     TTGCGGGAAAACAAGCTTAACACGCCCAC   n122612_h       TTGCAGGAAAACAAGCTTAAGACGCCCAC   2       +
ch321020    295     TTGCGGGAAAACAAGCTTAACACGCCCACT  n122613_h       TTGCAGGAAAACAAGCTTAACATGCCCACT  2       +
ch321020    295     TTGCGGGAAAACAAGCTTAACACGCCCAC   n122614_h       TTGCAGGAAAACAAGCTTAACATGCCCAC   2       +
ch321020    295     TTGCGGGAAAACAAGCTTAACACGCCCAC   n122615_h       TTGCAGGAAAACAAGCTTAACACGCCCAC   1       +
ch1324427    295     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122612_h       TTGCAGGAAAACAAGCTTAAGACGCCCAC   1       +
ch1324427    295     TTGCAGGAAAACAAGCTTAACACGCCCACT  n122613_h       TTGCAGGAAAACAAGCTTAACATGCCCACT  1       +
ch1324427    295     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122614_h       TTGCAGGAAAACAAGCTTAACATGCCCAC   1       +
ch1324427    295     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122615_h       TTGCAGGAAAACAAGCTTAACACGCCCAC   0       +
ch665615    294     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122612_h       TTGCAGGAAAACAAGCTTAAGACGCCCAC   1       +
ch665615    294     TTGCAGGAAAACAAGCTTAACACGCCCACT  n122613_h       TTGCAGGAAAACAAGCTTAACATGCCCACT  1       +
ch665615    294     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122614_h       TTGCAGGAAAACAAGCTTAACATGCCCAC   1       +
ch665615    294     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122615_h       TTGCAGGAAAACAAGCTTAACACGCCCAC   0       +
ch669024    294     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122612_h       TTGCAGGAAAACAAGCTTAAGACGCCCAC   1       +
ch669024    294     TTGCAGGAAAACAAGCTTAACACGCCCACT  n122613_h       TTGCAGGAAAACAAGCTTAACATGCCCACT  1       +
ch669024    294     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122614_h       TTGCAGGAAAACAAGCTTAACATGCCCAC   1       +
ch669024    294     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122615_h       TTGCAGGAAAACAAGCTTAACACGCCCAC   0       +
ch672430    294     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122612_h       TTGCAGGAAAACAAGCTTAAGACGCCCAC   1       +
ch672430    294     TTGCAGGAAAACAAGCTTAACACGCCCACT  n122613_h       TTGCAGGAAAACAAGCTTAACATGCCCACT  1       +
ch672430    294     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122614_h       TTGCAGGAAAACAAGCTTAACATGCCCAC   1       +
ch672430    294     TTGCAGGAAAACAAGCTTAACACGCCCAC   n122615_h       TTGCAGGAAAACAAGCTTAACACGCCCAC   0       +


论坛徽章:
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-02-20 14:39 |只看该作者
如果真用你这个脚本, 并且数据有4G的话, 你可能需要32G或更多的内存才能运行.
我猜你的机器正在拼命的 swap 吧?

论坛徽章:
0
3 [报告]
发表于 2014-02-20 14:48 |只看该作者
本帖最后由 vinian 于 2014-02-20 14:49 编辑

这个   $hash{$tmp[3]}.   会不会太长
然后打印出来很慢

用 哈希数组 试试

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11
4 [报告]
发表于 2014-02-20 14:51 |只看该作者
机器内存有48G呢,但还是很慢,咋样能快些啊,我不懂为啥4G就得32G内存,我不是学计算机的,而且还是菜鸟,您能不能给我大概解释下,万分谢谢!回复 2# q1208c


   

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11
5 [报告]
发表于 2014-02-20 14:53 |只看该作者
谢谢! 我看看咋写哈,还不会写数组的hash 回复 3# vinian


   

论坛徽章:
0
6 [报告]
发表于 2014-02-20 15:04 |只看该作者
本帖最后由 vinian 于 2014-02-20 15:08 编辑

回复 5# albertkingking
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. open my $fh, "<", "$ARGV[0]" or die "$!";
  5. <$fh>;
  6. my %hash;

  7. while(<$fh>){
  8.     chomp;
  9.     my @tmp = split;
  10.     my $va = $tmp[4]."\t".$tmp[0]."\t".$tmp[2];
  11.     push @{$hash{$tmp[3]}}, $va;
  12. }

  13. foreach my $key (keys %hash){
  14.     print ">$key\n";
  15.     for my $item ( @{$hash{$key}} ) {
  16.         print "$item\n";
  17.     }
  18. }
复制代码

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11
7 [报告]
发表于 2014-02-20 15:08 |只看该作者
这么快就写好了,呃,太感谢了,我好好学习学习{:3_193:} 回复 6# vinian


   

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11
8 [报告]
发表于 2014-02-20 15:14 |只看该作者
还得再次感谢下,测试了一下,果然一会就出结果了,受教了,太谢谢了{:3_193:} 回复 6# vinian


   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
9 [报告]
发表于 2014-02-20 15:18 |只看该作者
{:2_172:}
  1. #!/usr/bin/perl
  2. my %hash; <>;

  3. while (<>) {
  4.     my @tmp = split /\s+/, $_, 6;
  5.     push @{ $hash{ $tmp[3] } }, "$tmp[4]\t$tmp[0]\t$tmp[2]\n";

  6. }

  7. foreach $key ( keys %hash ) {
  8.     print ">$key\n", @{ $hash{$key} };
  9. }
复制代码

论坛徽章:
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
10 [报告]
发表于 2014-02-20 15:21 |只看该作者
回复 4# albertkingking

首先, 字符串方式的存储就会放大, 所以, 内存的总量一定大于4G, 然后, hash是每次申请的时候会double的, 所以, 会翻倍更快的.

所以, 你这4G的数据全导完, 估计得20G以上了. 保守点, 32G内存是靠谱的 .



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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP