免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk 处理两个文件比较复杂的比较不知道可不可以做到 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-10 15:45 |只看该作者 |倒序浏览
本帖最后由 Treywea 于 2014-12-11 21:24 编辑

a.txt
chr      pos    C  C+T
Chr1   1006    1   3
Chr1   1007    0   2
Chr1   1008    0   2
Chr1   2939    3   5
Chr1   35234   1   1
Chr1   491938  0   0
Chr2   2349    2   2
Chr2   3938    0   4

b.gff3
Chr1   exon    32        1007
Chr1   intro   320       1033939
Chr1   exon   2003       3383
Chr1   exon   32300      39283
Chr2   exin    303       3039
Chr2   exon   2529       332020


需要当文件a,b的第一栏相等 并且b的第二列等于exon时, 看a文件的pos是否大于b的$3并且小于$4,如果是的话对a文件执行m+=$3;all+=$4 打印m和all即可
有效的pos为:Chr1的1006 1007 2039 35234 Chr2的3938

故算出的答案为m=1+0+3+1+0=5 all=3+2+5+1+4=15


是不是有点复杂,而且不是按照行来计算的 这样是不是不能用awk 那怎么样可以计算呢?,求大神指点 没有写过两个文件一起处理的编程T T


----------------------------------------------------------------------------------------------------------------------------------------------
我给大家一个实际的数据吧,我的数据很大 一个7.5G 一个 78M
all.gff3
Chr1    MSU_osa1r7      gene    2903    10817   .       +       .      ID=LOC_Os01g01010;Name=LOC_Os01g01010;Note=TBC%20domain%20containing%20protein%2C%20expressed
Chr1    MSU_osa1r7      mRNA    2903    10817   .       +       .       ID=LOC_Os01g01010.1;Name=LOC_Os01g01010.1arent=LOC_Os01g01010
Chr1    MSU_osa1r7      exon    2903    3268    .       +       .       ID=LOC_Os01g01010.1:exon_1arent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      exon    3354    3616    .       +       .       ID=LOC_Os01g01010.1:exon_2arent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      exon    4357    4455    .       +       .       ID=LOC_Os01g01010.1:exon_3arent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      exon    5457    5560    .       +       .       ID=LOC_Os01g01010.1:exon_4arent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      exon    7136    7944    .       +       .       ID=LOC_Os01g01010.1:exon_5arent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      exon    8028    8150    .       +       .       ID=LOC_Os01g01010.1:exon_6arent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      exon    8232    8320    .       +       .       ID=LOC_Os01g01010.1:exon_7arent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      exon    8408    8608    .       +       .       ID=LOC_Os01g01010.1:exon_8arent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      exon    9210    9617    .       +       .       ID=LOC_Os01g01010.1:exon_9arent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      exon    10104   10187   .       +       .       ID=LOC_Os01g01010.1:exon_10;Parent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      exon    10274   10430   .       +       .       ID=LOC_Os01g01010.1:exon_11;Parent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      exon    10504   10817   .       +       .       ID=LOC_Os01g01010.1:exon_12;Parent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      five_prime_UTR  2903    3268    .       +       .       ID=LOC_Os01g01010.1:utr_1;Parent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      five_prime_UTR  3354    3448    .       +       .       ID=LOC_Os01g01010.1:utr_2;Parent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      CDS     3449    3616    .       +       .       ID=LOC_Os01g01010.1:cds_1;Parent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      CDS     4357    4455    .       +       .       ID=LOC_Os01g01010.1:cds_2;Parent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      CDS     5457    5560    .       +       .       ID=LOC_Os01g01010.1:cds_3;Parent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      CDS     7136    7944    .       +       .       ID=LOC_Os01g01010.1:cds_4;Parent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      CDS     8028    8150    .       +       .       ID=LOC_Os01g01010.1:cds_5;Parent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      CDS     8232    8320    .       +       .       ID=LOC_Os01g01010.1:cds_6;Parent=LOC_Os01g01010.1
Chr1    MSU_osa1r7      CDS     8408    8608    .       +       .       ID=LOC_Os01g01010.1:cds_7;Parent=LOC_Os01g01010.1


pair_S_L1.txt
chr     pos     strand  context ratio   eff_CT_count    C_count CT_count        rev_G_count     rev_GA_count    CI_lower      CI_upper
Chr1    1006    +       AACCC   0.000   1.00    0       1       3       3       0.000   0.793
Chr1    1007    +       ACCCT   0.000   1.00    0       1       3       3       0.000   0.793
Chr1    1008    +       CCCTA   1.000   1.00    1       1       3       3       0.207   1.000
Chr1    1013    +       AACCC   0.000   2.00    0       2       3       3       0.000   0.658
Chr1    1014    +       ACCCT   0.500   2.00    1       2       4       4       0.095   0.905
Chr1    1015    +       CCCTA   1.000   2.00    2       2       4       4       0.342   1.000
Chr1    1020    +       AACCC   0.500   2.00    1       2       4       4       0.095   0.905
Chr1    1021    +       ACCCT   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1022    +       CCCTA   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1027    +       AACCC   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1028    +       ACCCT   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1029    +       CCCTA   1.000   2.00    2       2       5       5       0.342   1.000
Chr1    1034    +       AACCC   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1035    +       ACCCT   0.500   2.00    1       2       5       5       0.095   0.905
Chr1    1036    +       CCCTA   0.500   2.00    1       2       5       5       0.095   0.905
Chr1    1041    +       AACCC   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1042    +       ACCCT   0.500   2.00    1       2       4       4       0.095   0.905
Chr1    1043    +       CCCTA   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1048    +       AACCC   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1049    +       ACCCT   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1050    +       CCCTA   0.500   2.00    1       2       5       5       0.095   0.905
Chr1    1055    +       AACCC   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1056    +       ACCCT   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1057    +       CCCTA   1.000   2.00    2       2       5       5       0.342   1.000
Chr1    1061    +       AACCC   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1062    +       ACCCT   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1063    +       CCCTA   0.500   2.00    1       2       5       5       0.095   0.905
Chr1    1068    +       AACCC   0.000   2.00    0       2       5       5       0.000   0.658
Chr1    1069    +       ACCCT   0.500   2.00    1       2       5       5       0.095   0.905
Chr1    1070    +       CCCTA   0.500   2.00    1       2       5       5       0.095   0.905
Chr1    1074    +       AACCC   0.000   2.00    0       2       4       4       0.000   0.658
Chr1    1075    +       ACCCT   0.000   3.00    0       3       5       5       0.000   0.562
Chr1    1076    +       CCCTA   0.000   3.00    0       3       5       5       0.000   0.562
Chr1    1081    +       AACCC   0.333   3.00    1       3       7       7       0.061   0.792
Chr1    1082    +       ACCCT   0.000   3.00    0       3       7       7       0.000   0.562


我就是要比对每一个染色体(Chr1~Chr12)pos是不是在all.gff3文件mRNA的$4和$5之间 是的话 计算pair_S_L1.txt 的m+=$6 all+=$7

因为数据太大 所以也可以先筛选一下Chr1 和 mRNA 再来计算。。。


论坛徽章:
0
2 [报告]
发表于 2014-12-10 16:12 |只看该作者
回复 1# Treywea
是这个意思吗?
  1. join a.txt b.txt|awk '$5=="exon"&&$2<$6&&$2<$7{m+=$3;all+=$4}END{printf "m=%d,all=%d\n",m,all}'
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-12-10 16:21 |只看该作者
回复 2# Looiml

两个文件的 Chr1那一项不是对应的 长短个数也不同 不能join在一起额 其实就是要找出a文件在不在b文件$2=="exon" 后面两个数字的范围内
   

论坛徽章:
0
4 [报告]
发表于 2014-12-10 16:30 |只看该作者
回复 3# Treywea
描述得不太清楚啊~
看a文件的pos是否小于b的$3并且小于$4,

应该是“看a文件的pos是否于b的$3并且小于$4,”?

再者,b.txt中有两行描述了Chr1 exon的范围:
Chr1   exon   32         30283
Chr1   exon   203944  338383
到底要取哪个范围呢?
   

论坛徽章:
0
5 [报告]
发表于 2014-12-10 16:44 |只看该作者
回复 4# Looiml


    啊 是我的问题 是应该大于$3小于$4. 就是b文件中会有好几项exon,要看是不是a文件中pos的数值在b文件中所有exon数值的范围里,exon其实就是DNA里面的一些特别区域,我这个就是在计算这些区域中的C和C+T值 的总和

论坛徽章:
2
白羊座
日期:2014-06-17 11:04:28午马
日期:2014-12-29 15:37:13
6 [报告]
发表于 2014-12-10 17:11 |只看该作者
给出具体要的结果,按照你题目的例子要求,给出结果,没太明白,不知道具体要什么

论坛徽章:
0
7 [报告]
发表于 2014-12-10 17:28 |只看该作者
回复 6# 银风冷月


   
a.txt
chr      pos    C  C+T
Chr1   1009   1   3
Chr1   2938   0   2
Chr2   2349   2   2
Chr2   3938   0   4

b.txt
Chr1   exon   32         30283
Chr1   intro   320       1033939
Chr1   exon   203944  338383
Chr2   exin    303       3039
Chr2   exon   2029     332020

a是文件[哪一列]
就是我要当 a[$1]==b[$1] 且 b[$2=="exon"]时 符合b[$3]<=a[$2]<=b[$4]的行计算a文件中all+=$3; All+=$4;的总和

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
8 [报告]
发表于 2014-12-10 17:40 |只看该作者
这里有个问题,你a和b第一列都不是唯一的,怎么匹配?

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
9 [报告]
发表于 2014-12-10 17:52 |只看该作者
回复 1# Treywea


    实例 a b 文件打印出来的 m 和all的值是多少呀

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
10 [报告]
发表于 2014-12-10 17:56 |只看该作者
  1. awk 'NR==FNR&&$2=="exon"{a[$1" "NR]=$3;b[$1" "NR]=$4;next}{for(i in b)if(i~$1&&$2>=a[i]&&$2<=b[i]){m+=$3;all+=$4}}END{print "m="m,"all="all}' b.txt a.txt
  2. m=3 all=11
复制代码
是这样子么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP