免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求个匹配的命令 [复制链接]

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-12 11:52 |只看该作者 |倒序浏览
问题一:

  1. T       C       c.1171C>T
  2. TT       C       c.1171C>TT
  3. delN    GA      c.1191_1192delN
  4. T       G       c.136delT
  5. N       GGGAAAGGAAGGCTA c.1227_1241delN>ins11N
  6. A       G       c.1237dupN
  7. delN    ATC       c.1239dupATC
  8. delN    ATC       c.1239insATC
  9. delN    CTATCTCCACGT    c.1239_1250insN
  10. delN    TATC    c.117delATCG>insAA
复制代码
对于上面的文本,三列,tab分隔,我想得到第四列,第四列是从第三列中“c.[0-9]+”后面匹配出来的,分五种情况:
1、如果是"[ATCG]+">"[ATCG]+"的话,输出“>"后面的"[ATCG]+",如c.1171C>T,则输出T,c.1171C>TT,输出TT;
2、如果是”del[ATCGN]+"的话,输出第二列中第一位[ATCG],比如第三列是c.117delATCG.第二列是AATCG的话,输出A;第三列是c.117delN.第二列是TCG的话,输出T;
3、如果是”dup[ATCGN]+"的话,输出第二列中全部[ATCG]+两次,比如第三列是c.117dupATCG.第二列是ATCG的话,输出ATCGATCG;第三列是c.117dupN.第二列是TCG的话,输出TCGTCG;
4、如果是”ins[ATCGN0-9]+"的话,输出第二列中全部“[ATCG]+”以及ins后面的全部“字符”,比如第三列是c.117insATCG.第二列是CG的话,输出CGATCG;第三列是c.117insN.第二列是TCG的话,输出TCGN;第三列是c.117ins11.第二列是TCG的话,输出TCG11;
难点:
5、组合形式:如果是同时存在del和ins的,输出第二列中第一位[ATCG]”以及ins后面的全部“字符”,比如第三列是c.1227_1241delN>ins11N.第二列是CG的话,输出CG11N;第三列是c.117delATCG>insN.第二列是AATCG的话,输出AN;第三列是c.117delATCG>insAA.第二列是ATCG的话,输出AAA;
-------------------------------------------
所以我期望得到的结果是:

  1. T       C       c.1171C>T     T
  2. TT       C       c.1171C>TT     TT
  3. delN    GA      c.1191_1192delN     GA
  4. T       G       c.136delT     G
  5. N       GGGAAAGGAAGGCTA c.1227_1241delN>ins11N     G11N
  6. A       G       c.1237dupN     GG
  7. delN    ATC       c.1239dupATC     ATCATC
  8. delN    ATC       c.1239insATC     ATCATC
  9. delN    CTATCTCCACGT    c.1239_1250insN    CTATCTCCACGTN
  10. delN    TATC    c.117delATCG>insAA   TAA
复制代码
求助了,大神们~

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
2 [报告]
发表于 2014-02-12 11:54 |只看该作者
说好的问题二、三、四呢

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
3 [报告]
发表于 2014-02-12 12:19 |只看该作者
本帖最后由 Herowinter 于 2014-02-12 12:23 编辑

回复 1# huang6894
第3行
  1. delN    GA      c.1191_1192delN     GA
复制代码
好像不在上面的5种情况之内?
还有第9行。主要是c.[0-9]+匹配不上这里的下划线。

   

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
4 [报告]
发表于 2014-02-12 12:51 |只看该作者
本帖最后由 rdcwayx 于 2014-02-12 13:24 编辑

回复 1# huang6894
两个假定:
1. c.[0-9]+应该为c.[0-9_]+
2. $2肯定是[ATCGN]+,不含其他无关字符
  1. awk '$3~/c.[0-9_]+[ATCG]+>[ATCG]+/{$0=$0"\t"gensub(/.*>(.*)/,"\\1",1,$3);print;next}
  2. $3~/c.[0-9_]+del.*ins.*/{$0=$0"\t"substr($2,1,1)gensub(/.*ins(.*)/,"\\1",1,$3);print;next}
  3. $3~/c.[0-9_]+del[ATCGN_]+/{$0=$0"\t"substr($2,1,1);print;next}
  4. $3~/c.[0-9_]+dup[ATCGN]+/{$0=$0"\t"$2$2;print;next}
  5. $3~/c.[0-9_]+ins[ATCGN0-9]+/{$0=$0"\t"$2gensub(/.*ins(.*)/,"\\1",1,$3);print;next}' i
复制代码
结果,第3行有点不一样
  1. T       C       c.1171C>T        T
  2. TT       C       c.1171C>TT        TT
  3. delN    GA      c.1191_1192delN        G
  4. T       G       c.136delT        G
  5. N       GGGAAAGGAAGGCTA c.1227_1241delN>ins11N        G11N
  6. A       G       c.1237dupN        GG
  7. delN    ATC       c.1239dupATC        ATCATC
  8. delN    ATC       c.1239insATC        ATCATC
  9. delN    CTATCTCCACGT    c.1239_1250insN        CTATCTCCACGTN
  10. delN    TATC    c.117delATCG>insAA        TAA
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
5 [报告]
发表于 2014-02-12 13:51 |只看该作者
  1. awk -vOFS='\t' '{t=substr($2,1,1);if(match($3,/.*del.*ins(.*)/,a))$4=t""a[1];else if(match($3,/.*ins(.*)/,a))$4=$2a[1];else if($3~"del")$4=t;else if($3~"dup")$4=$2$2;else $4=gensub(/.*>(.*)/,"\\1",1,$3)}1' i
  2. T       C       c.1171C>T       T
  3. TT      C       c.1171C>TT      TT
  4. delN    GA      c.1191_1192delN G
  5. T       G       c.136delT       G
  6. N       GGGAAAGGAAGGCTA c.1227_1241delN>ins11N  G11N
  7. A       G       c.1237dupN      GG
  8. delN    ATC     c.1239dupATC    ATCATC
  9. delN    ATC     c.1239insATC    ATCATC
  10. delN    CTATCTCCACGT    c.1239_1250insN CTATCTCCACGTN
  11. delN    TATC    c.117delATCG>insAA      TAA
复制代码

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
6 [报告]
发表于 2014-02-12 14:14 |只看该作者
回复 2# Herowinter


    嘻嘻,其实是截取出来的:
问题二:awk中gsub("ins([0-9]+)?N(>)?","ins",$5);,如果我想保留匹配的数字怎么办?

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
7 [报告]
发表于 2014-02-12 14:17 |只看该作者
回复 3# Herowinter


    哦哦,sorry~我应该说明一下的就是c.[0-9]+的情况包括:
c.117、c.117_118、c.117+1、c.118-1、c.117+1_c.118、c.117+1_c.118-1、c.117+1_c.118+1、c.*117_c.*118、c.*118

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
8 [报告]
发表于 2014-02-12 14:19 |只看该作者
回复 5# yestreenstars


    谢谢大神们

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
9 [报告]
发表于 2014-02-12 14:19 |只看该作者
回复 4# Herowinter


    谢谢,谢谢大神

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
10 [报告]
发表于 2014-02-12 14:39 |只看该作者
回复 6# huang6894
需要反向引用我都用gensub的。


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP