免费注册 查看新帖 |

Chinaunix

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

如何用perl编写程序比较两个文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-18 16:43 |只看该作者 |倒序浏览
各位大侠本人是学习生物信息的学生,现遇到难题向各位大侠请教,如何用perl编写程序吧两个文件进行对比,如果文件1中的氨基酸序列在文件2中有,就把这条序列输出(输出时不光是氨基酸序列吧上面的注释信息也输出)
文件1的格式是这样的(截取的一点)
>101m_A mol:protein length:154  MYOGLOBIN
MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRVKHLKTEAEMKASEDLKKHGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHPGNFGADAQGAMNKALELFRKDIAAKYKELGYQG
>102l_A mol:protein length:165  T4 LYSOZYME
MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNAAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILRNAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMLQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDAYKNL
>102m_A mol:protein length:154  MYOGLOBIN
MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKTEAEMKASEDLKKAGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISE
  
文件2的格式是这样的
>ENSP00000381386 pep:known chromosome:GRCh37:22:24313554:24316773:-1 gene:ENSG00000099977 transcript:ENST00000398344 gene_biotype:protein_coding transcript_biotype:protein_coding
MPFLELDTNLPANRVPAGLEKRLCAAAASILGKPADRVNVTVRPGLAMALSGSTEPCAQL
SISSIGVVGTAEDNRSHSAHFFEFLTKELALGQDRILIRFFPLESWQIGKIGTVMTFL
>ENSP00000215773 pep:known chromosome:GRCh37:22:24313554:24322019:-1 gene:ENSG00000099977 transcript:ENST00000350608 gene_biotype:protein_coding transcript_biotype:protein_coding
MPFLELDTNLPANRVPAGLEKRLCAAAASILGKPADRVNVTVRPGLAMALSGSTEPCAQL
SISSIGVVGTAEDNRSHSAHFFEFLTKELALGQDRILIRFFPLESWQIGKIGTVMTFL
各位大侠一定要帮帮忙啊!!!!!期待你们的回复

论坛徽章:
5
亥猪
日期:2013-10-15 13:41:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34申猴
日期:2013-10-28 10:55:45辰龙
日期:2013-10-31 13:29:29丑牛
日期:2014-02-14 11:25:54
2 [报告]
发表于 2013-11-18 17:42 |只看该作者
请撸主说明白输入是什么 输出是什么,如果可以举个栗子说明下。
氨基酸序列 是指哪一块?

论坛徽章:
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
3 [报告]
发表于 2013-11-18 18:02 |只看该作者
lz 亲应该去学会如何提问

一个简单的例子说明如何提问

http://bbs.chinaunix.net/thread-4111100-1-2.html

论坛徽章:
0
4 [报告]
发表于 2013-11-19 09:23 |只看该作者
不好意思啊各位大侠,那我再说明白点啊。比如说我想用文件1中第一条氨基酸序列MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRVKHLKTEAEMKASEDLKKHGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHPGNFGADAQGAMNKALELFRKDIAAKYKELGYQG)与文件2中的所有氨基酸序列依次比对(只比较氨基酸序列不用管前面的>ENSP00000381386 pep:known chromosome:GRCh37:22:24313554:24316773:-1 gene:ENSG00000099977 transcript:ENST00000398344 gene_biotype:protein_coding这些)假设这条氨基酸序列和文件2中的第一条氨基酸序列(MPFLELDTNLPANRVPAGLEKRLCAAAASILGKPADRVNVTVRPGLAMALSGSTEPCAQLSISSIGVVGTAEDNRSHSAHFFEFLTKELALGQDRILIRFFPLESWQIGKIGTVMTFL)相等,那么我就把文件1中的这条序列(>101m_A mol:protein length:154  MYOGLOBIN
MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRVKHLKTEAEMKASEDLKKHGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHPGNFGADAQGAMNKALELFRKDIAAKYKELGYQG)和文件2中的这个序列
(>ENSP00000381386 pep:known chromosome:GRCh37:22:24313554:24316773:-1 gene:ENSG00000099977 transcript:ENST00000398344 gene_biotype:protein_coding transcript_biotype:protein_coding
MPFLELDTNLPANRVPAGLEKRLCAAAASILGKPADRVNVTVRPGLAMALSGSTEPCAQL
SISSIGVVGTAEDNRSHSAHFFEFLTKELALGQDRILIRFFPLESWQIGKIGTVMTFL
)一起放入到文件3中。依次再用文件1中的第二条序列和文件2中的所有序列对比如果有一样的在放入文件3中
不知道我说明白没有。请各位大侠帮帮忙啊!急切的等待回复啊

论坛徽章:
0
5 [报告]
发表于 2013-11-19 09:23 |只看该作者
不好意思啊各位大侠,那我再说明白点啊。比如说我想用文件1中第一条氨基酸序列MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRVKHLKTEAEMKASEDLKKHGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHPGNFGADAQGAMNKALELFRKDIAAKYKELGYQG)与文件2中的所有氨基酸序列依次比对(只比较氨基酸序列不用管前面的>ENSP00000381386 pep:known chromosome:GRCh37:22:24313554:24316773:-1 gene:ENSG00000099977 transcript:ENST00000398344 gene_biotype:protein_coding这些)假设这条氨基酸序列和文件2中的第一条氨基酸序列(MPFLELDTNLPANRVPAGLEKRLCAAAASILGKPADRVNVTVRPGLAMALSGSTEPCAQLSISSIGVVGTAEDNRSHSAHFFEFLTKELALGQDRILIRFFPLESWQIGKIGTVMTFL)相等,那么我就把文件1中的这条序列(>101m_A mol:protein length:154  MYOGLOBIN
MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRVKHLKTEAEMKASEDLKKHGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHPGNFGADAQGAMNKALELFRKDIAAKYKELGYQG)和文件2中的这个序列
(>ENSP00000381386 pep:known chromosome:GRCh37:22:24313554:24316773:-1 gene:ENSG00000099977 transcript:ENST00000398344 gene_biotype:protein_coding transcript_biotype:protein_coding
MPFLELDTNLPANRVPAGLEKRLCAAAASILGKPADRVNVTVRPGLAMALSGSTEPCAQL
SISSIGVVGTAEDNRSHSAHFFEFLTKELALGQDRILIRFFPLESWQIGKIGTVMTFL
)一起放入到文件3中。依次再用文件1中的第二条序列和文件2中的所有序列对比如果有一样的在放入文件3中
不知道我说明白没有。请各位大侠帮帮忙啊!急切的等待回复啊

论坛徽章:
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
6 [报告]
发表于 2013-11-19 10:30 |只看该作者
大侠,那文件2的格式是
氨基酸序列是多少行啊?再说明白点啊。{:2_176:}
>ENSP...
ASDFGH
CFEDFG

>ENSP....
ASDFGHCFEDFG

论坛徽章:
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
7 [报告]
发表于 2013-11-19 10:30 |只看该作者
楼主的问题我大概明白了, 但楼主的文件我真的没看懂.
我换个简单的例子, 楼主看一下是不是这个意思.
假设有文件1, 文件2
内容如下:

  1. 文件1:
  2. A123 B456 C789 D923
  3. A231 B342 C282 D912

  4. 文件2:
  5. E123 F456 G789 D923
  6. E231 F342 G282 D912

复制代码
楼主是不是想让两个文件中的 D923 这一行 全部输出到 文件3 中 ?

论坛徽章:
0
8 [报告]
发表于 2013-11-19 14:31 |只看该作者
俺也是生物信息的,LZ的意思我给解释下
文件1是这样的(>序列名,M...为对应的序列)
>name1
M.....
>name2
J....

文件2是这样的
>NAME1
M...
>NAME2
M...
>NAME3
M...
....

文件1是query,文件2是lib,将文件1里面的每一个name1,name2所对应的序列到文件2的lib中搜索,在文件2中能够搜到同样的序列,就输出到文件3,并且同时输入它在文件1中的>name*

论坛徽章:
0
9 [报告]
发表于 2013-11-19 15:38 |只看该作者
回复 1# li11min22
  1. #!/usr/bin/perl -w

  2. use strict;

  3. my ($in1,$in2,$out3)=@ARGV;
  4. open FL1,"<$in1" or die ($!);
  5. open FL2,"<$in2" or die ($!);
  6. open OU,">$out3" or die ($!);

  7. my (%lib, %query);
  8. my (@name1,@name2);
  9. my $tmp="M";
  10. while(<FL2>){
  11.     chomp;
  12.     if (/^\>/ && $tmp=~/\w+/){
  13.         push @name2,$_;
  14.     }elsif(/\w+/ && $tmp=~/\w+/){
  15.         $lib{$name2[-1]} = $tmp.$_;
  16.     }
  17.     $tmp=$_;
  18. }

  19. while(<FL1>){
  20.     chomp;
  21.     if(/^\>/){
  22.         push @name1,$_;
  23.     }elsif(/\w+/){
  24.         $query{$name1[-1]}=$_;
  25.     }
  26. }

  27. foreach my $key(keys %query){
  28.     if ($query{$key}~~@lib{@name2}){
  29.         print OU "$key\n$query{$key}\n"
  30.     }
  31. }


  32. close FL1;
  33. close FL2;
  34. close OU;
复制代码
纯新手,望指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP