免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7545 | 回复: 54

【新手】怎么用perl写一个脚本比较两个基因文件里相同的语段再输出到新的文件里 [复制链接]

论坛徽章:
0
发表于 2017-02-22 21:11 |显示全部楼层
就是我有两个序列的,在linux服务器上
我需要比较两个文件,导出相同的部分基因

A里面的内容是这样的
Cotton_A_32900_BGI-A2_v1.0        AD2_NBI.cds:Gbscaffold8330.2.0        99.551        445        2        0        1        445        652        1096
一行一行的有许多行

与之对应B文件就应该是
AD2_NBI.cds:Gbscaffold8330.2.0    Cotton_A_32900_BGI-A2_v1.0        99.551        445        2        0        1        445        652        1096
也应该是许多行

我想的是首先先把A文件第一竖行与第二竖行互换,然后再用哈希将比如全部的“Cotton_A_32900_BGI-A2_v1.0        AD2_NBI.cds:Gbscaffold8330.2.0”弄到哈希里
与第二个文件比对,有一样的就输出到C文件中。。
但是自己写的程序就是有Bug

不知道有没有大佬能够提一下详细的写法。。
拜托啦啦啦OwO

论坛徽章:
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
发表于 2017-02-22 21:19 |显示全部楼层

  1. awk 'NR==FNR{a[$2$1]=1;next}a[$1$2]' A B > C
复制代码

论坛徽章:
0
发表于 2017-02-22 21:29 |显示全部楼层
回复 2# moperyblue

这个是什么指令。。是linux里的么

论坛徽章:
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
发表于 2017-02-22 21:37 |显示全部楼层
回复 3# 酸奶盒


awk
一般linux都有 你试试看

论坛徽章:
0
发表于 2017-02-22 21:48 |显示全部楼层
回复 4# moperyblue

好的谢谢,我看看

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-02-22 22:18 |显示全部楼层
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my %hData = ();
  5. while (<DATA>){
  6.         last if (/\A\s*\z/);
  7.         my @aT = split;
  8.         $hData{"@aT[0,1]"} = 1;
  9. }

  10. while (<DATA>){
  11.         my @aT = split;
  12.         print if ($hData{"@aT[0,1]"} or $hData{"@aT[1,0]"});
  13. }

  14. __DATA__
  15. Cotton_A_32900_BGI-A2_v1.0        AD2_NBI.cds:Gbscaffold8330.2.0        99.551        445        2        0        1        445        652        1096

  16. AD2_NBI.cds:Gbscaffold8330.2.0    Cotton_A_32900_BGI-A2_v1.0        99.551        445        2        0        1        445        652        1096
复制代码

论坛徽章:
0
发表于 2017-02-23 14:15 |显示全部楼层
回复 2# moperyblue


我试了很久输出不出来。。请再帮我看一下QAQ

论坛徽章:
0
发表于 2017-02-23 14:36 |显示全部楼层
回复 6# sunzhiguolu

不太懂这一段 print if ($hData{"@aT[0,1]"} or $hData{"@aT[1,0]"});

是怎么把结果输出的
还有用结尾DATA的形式是要把两个文件全部原始数据都弄到一个文件里么

论坛徽章:
0
发表于 2017-02-23 14:36 |显示全部楼层
回复 6# sunzhiguolu

不太懂这一段 print if ($hData{"@aT[0,1]"} or $hData{"@aT[1,0]"});

是怎么把结果输出的
还有用结尾DATA的形式是要把两个文件全部原始数据都弄到一个文件里么

论坛徽章:
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
发表于 2017-02-23 14:41 |显示全部楼层
回复 7# 酸奶盒

more A B
  1. ::::::::::::::
  2. A
  3. ::::::::::::::
  4. Cotton_A_32900_BGI-A2_v1.0        AD2_NBI.cds:Gbscaffold8330.2.0        99.551        445        2        0        1        445        652        1096
  5. ::::::::::::::
  6. B
  7. ::::::::::::::
  8. a
  9. AD2_NBI.cds:Gbscaffold8330.2.0    Cotton_A_32900_BGI-A2_v1.0        99.551        445        2        0        1        445        652        1096
  10. b
复制代码

awk 'NR==FNR{a[$2$1]=1;next}a[$1$2]' A B
  1. AD2_NBI.cds:Gbscaffold8330.2.0    Cotton_A_32900_BGI-A2_v1.0        99.551        445        2        0        1        445        652        1096
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP