免费注册 查看新帖 |

Chinaunix

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

perl程序改进,求大神 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之佛山
日期:2016-07-03 00:10:20
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-07-02 22:21 |只看该作者 |倒序浏览
#!/usr/bin/perl
open FILE,"gzip -dc protein.faa.gz|" or die "open error!";
@File_1 = <FILE>;
close(FILE);
$File_2 = join("",@File_1);
@File_3 = split(/>/,$File_2);
while ($line = <STDIN>{
        chomp($line);
        foreach $File_4(@File_3){
                if($File_4 =~ /$line/){
                        print ">".$File_4;
                }
        }
}
这是我写的一个用文件aa中的关键字符,去压缩文件protein.faa.gz中匹配的程序
文件aa的内容类似于
NP_001269438.1
XP_011540662.1
XP_011539799.1
XP_011531007.1
文件protein.faa.gz的内容类似于
>NP_000005.2 alpha-2-macroglobulin precursor [Homo sapiens]
MGKNKLLHPSLVLLLLVLLPTDASVSGKPQYMVLVPSLLHTETTEKGCVLLSYLNETVTVSASLESVRGNRSLFTDLEAE
NDVLHCVAFAVPKSSSNEEVMFLTVQVKGPTQEFKKRTTVMVKNEDSLVFVQTDKSIYKPGQTVKFRVVSMDENFHPLNE
LIPLVYIQDPKGNRIAQWQSFQLEGGLKQFSFPLSSEPFQGSYKVVVQKKSGGRTEHPFTVEEFVLPKFEVQVTVPKIIT
ILEEEMNVSVCGLYTYGKPVPGHVTVSICRKYSDASDCHGEDSQAFCEKFSGQLNSHGCFYQQVKTKVFQLKRKEYEMKL
>NP_000006.2 arylamine N-acetyltransferase 2 [Homo sapiens]
MDIEAYFERIGYKNSRNKLDLETLTDILEHQIRAVPFENLNMHCGQAMELGLEAIFDHIVRRNRGGWCLQVNQLLYWALT
TIGFQTTMLGGYFYIPPVNKYSTGMVHLLLQVTIDGRNYIVDAGSGSSSQMWQPLELISGKDQPQVPCIFCLTEERGIWY
LDQIRREQYITNKEFLNSHLLPKKKHQKIYLFTLEPRTIEDFESMNTYLQTSPTSSFITTSFCSLQTPEGVYCLVGFILT
>NP_000007.1 medium-chain specific acyl-CoA dehydrogenase, mitochondrial isoform a precursor [Homo sapiens]
MAAGFGRCCRVLRSISRFHWRSQHTKANRQREPGLGFSFEFTEQQKEFQATARKFAREEIIPVAAEYDKTGEYPVPLIRR
AWELGLMNTHIPENCGGLGLGTFDACLISEELAYGCTGVQTAIEGNSLGQMPIIIAGNDQQKKKYLGRMTEEPLMCAYCV
TEPGAGSDVAGIKTKAEKKGDEYIINGQKMWITNGGKANWYFLLARSDPDPKAPANKAFTGFIVEADTPGIQIGRKELNM
>NP_000008.1 short-chain specific acyl-CoA dehydrogenase, mitochondrial isoform 1 precursor [Homo sapiens]
MAAALLARASGPARRALCPRAWRQLHTIYQSVELPETHQMLLQTCRDFAEKELFPIAAQVDKEHLFPAAQVKKMGGLGLL
AMDVPEELGGAGLDYLAYAIAMEEISRGCASTGVIMSVNNSLYLGPILKFGSKEQKQAWVTPFTSGDKIGCFALSEPGNG
SDAGAASTTARAEGDSWVLNGTKAWITNAWEASAAVVFASTDRALQNKGISAFLVPMPTPGLTLGKKEDKLGIRGSSTAN



我写的这个有点慢,请问各位大神有什么更简单,快捷的程序,拜谢各位了。

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
2 [报告]
发表于 2016-07-03 04:07 |只看该作者
本帖最后由 RE_HASH 于 2016-07-03 04:07 编辑

压缩文件貌似很大,你把它读到内存里有翻来覆去的倒了三遍,当然慢了。试试把大文件转换成>开始的单行文件file3,然后grep -f file2 file3 > result1
再把result1转换成短行的faa.

论坛徽章:
0
3 [报告]
发表于 2016-07-03 07:10 来自手机 |只看该作者
试试引用来提升速度

论坛徽章:
1
15-16赛季CBA联赛之佛山
日期:2016-07-03 00:10:20
4 [报告]
发表于 2016-07-03 11:52 |只看该作者
回复 2# RE_HASH
大神的意思是先把文件处理好了在引用?

论坛徽章:
1
15-16赛季CBA联赛之佛山
日期:2016-07-03 00:10:20
5 [报告]
发表于 2016-07-03 11:53 |只看该作者
回复 3# 华小飞_Perl
我去试试,谢谢咯

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
6 [报告]
发表于 2016-07-03 13:23 |只看该作者
$> zcat file1.gz|tr '>\n' '\n:'|grep -f file2|perl -npe 's/:$//;s/:/\n/g;s/(^|\n+)NP/>NP/g' >result

论坛徽章:
1
15-16赛季CBA联赛之佛山
日期:2016-07-03 00:10:20
7 [报告]
发表于 2016-07-03 16:46 |只看该作者
回复 6# RE_HASH
谢谢大神了     
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP