免费注册 查看新帖 |

Chinaunix

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

[文本处理] 多个文本的信息匹配问题求助 [复制链接]

论坛徽章:
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)] [报告]
发表于 2013-09-10 11:42 |只看该作者 |倒序浏览
各位大大:
我想咨询一下,如果我现在有以下三个文件
__________________________________________________________________________
all.txt:
refseq1 refGene mRNA    1   2   .       +      .       NR_024540       WASH5P
refseq1 refGene exon    2   10   .       +       .       NR_024540       WASH5P  E1     
refseq1 refGene intr    4   6   .       +       .       NR_024540       WASH5P  I1
refseq1 refGene exon    9   11   .       +      .       NR_024540       WASH5P  E2     
refseq2 refGene exon    1  6  .       +       .       NM_001005221    OR4F29  
refseq2 refGene exon    3  6  .       +       .       NM_001005221    OR4F29  E1     
refseq2 refGene exon    7  9  .       +       .       NM_001005221    OR4F29  E1      
refseq2 refGene mRNA    1  3  .       +       .       NM_001005224    OR4F3
refseq2 refGene exon    6  8  .       +       .       NM_001005224    OR4F3   E1     

nm.txt
NR_024540
NM_001005221

seq.txt
>refseq1 chr1 + 1000000 [1,1000000] ""
AGCTCGGTCCCCCCCCCCCCCCCTTTTTTT

>refseq2 chr2 + 1000000 [1,1000000] ""
AGCCCCCCCTCGGTCCCCCCCCCTTTTTTT
_________________________________________________________________________

我想得到的是nm.txt的字符串对应all.txt的第9列且all.txt的第十一列以E开始/^E/(不确定是否每一行都有第11列)的对应行,匹配后根据第一列的信息匹配seq.txt上的序列信息,获取第四列到第五列数值间的碱基,如果同一NM号且碱基序列间有重叠,合并输出.

也就是说最后得到的结果应该是:
_______________________________________________________________

>NR_024540_E1   WASH5P  refseq1 +       2  10  9 11  
GCTCGGTCCC

> NM_001005221_E1  OR4F29   refseq2 +       3  6
CCCC

> NM_001005221_E2  OR4F29   refseq2 +       7  9
CCC

可是我花费很多时间都得不出结果,怎么办呀??求助求助!

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
2 [报告]
发表于 2013-09-10 14:04 |只看该作者
回复 1# huang6894

  1. declare -A seqArr
  2. declare -A all

  3. while read line; do
  4.     if [[ "$line" == "" ]]; then
  5.                 continue        
  6.         fi
  7.     if [[ "$line" =~ ">ref" ]]; then
  8.         ref=${line%% *}
  9.         ref=${ref:1}
  10.         continue
  11.     fi
  12.     seqArr["$ref"]="$line"
  13. done <seq.txt

  14. while read line; do
  15.         arr=($line)
  16.         if [[ ${arr[10]} =~ "E" ]]; then
  17.                 ref=${arr[0]}
  18.                 nm=${arr[8]}
  19.                 if `grep $ref seq.txt &>/dev/null`; then
  20.                         if `grep $nm nm.txt &>/dev/null`; then
  21.                
  22.                                 echo \>${nm}_${arr[10]} ${arr[9]} $ref "+" ${arr[3]} ${arr[4]}
  23.                                 dna=${seqArr["$ref"]}
  24.                                 echo ${dna:(( ${arr[3]}-1)):(( ${arr[4]}-${arr[3]}+1 ))}
  25.                         fi       
  26.                 fi
  27.         fi
  28. done <all.txt
复制代码

评分

参与人数 1可用积分 +4 收起 理由
rdcwayx + 4 赞一个!

查看全部评分

论坛徽章:
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
3 [报告]
发表于 2013-09-10 14:16 |只看该作者
回复 2# liion631818


    大大,不知道为什么:
                                dna=${seqArr["$ref"]}
                                echo ${dna ${arr[3]}-1)) ${arr[4]}-${arr[3]}+1 ))}
这段好像echo不出来

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
4 [报告]
发表于 2013-09-10 14:29 |只看该作者
回复 3# huang6894


    在bash里运行。
  1. bash script.sh
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
5 [报告]
发表于 2013-09-10 14:30 |只看该作者
回复 2# liion631818


    没有实现这条: 如果同一NM号且碱基序列间有重叠,合并输出.

论坛徽章:
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 [报告]
发表于 2013-09-10 15:39 |只看该作者
回复 5# rdcwayx


    是呢,怎么办呢?

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
7 [报告]
发表于 2013-09-10 23:11 |只看该作者
回复 6# huang6894

  1. #!/bin/bash

  2. declare -A seqArr
  3. declare -A all

  4. while read line; do
  5.     if [[ "$line" == "" ]]; then
  6.                 continue         
  7.         fi
  8.     if [[ "$line" =~ ">ref" ]]; then
  9.         ref=${line%% *}
  10.         ref=${ref:1}
  11.         continue
  12.     fi
  13.     seqArr["$ref"]="$line"
  14. done <seq.txt

  15. while read line; do

  16.         arr=($line)
  17.         if [[ ${arr[10]} =~ "E" ]]; then
  18.                 ref=${arr[0]}
  19.                 nm=${arr[8]}
  20.                 if `grep $ref seq.txt &>/dev/null`; then
  21.                         if `grep $nm nm.txt &>/dev/null`; then
  22.                                 all[\>${nm}_${arr[10]} ${arr[9]} $ref]="${all[\>${nm}_${arr[10]} ${arr[9]} $ref]} ${arr[3]} ${arr[4]}"
  23.                         fi        
  24.                 fi
  25.         fi
  26. done <all.txt

  27. for i in "${!all[@]}"; do
  28.     set -- $i
  29.     ref=$3
  30.     dna=${seqArr["$ref"]}
  31.     arr1=(`echo ${all[$i]} | xargs -n1 | sort -n` )
  32.     (( last=${#arr1[@]}-1 ))
  33.     echo $i" +"${all[$i]}
  34.     echo ${dna:(( ${arr1[0]}-1)):(( ${arr1[$last]}-${arr1[0]}+1 ))}
  35. done
复制代码

论坛徽章:
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 [报告]
发表于 2013-09-11 12:39 |只看该作者
本帖最后由 huang6894 于 2013-09-11 12:42 编辑

回复 7# liion631818


  谢谢大大,我还有个问题:
  我在执行这个脚本的时候,提示
——————————————————————————————————————————————————————————————————————
  1. test.sh: line 3: declare: -A: invalid option
  2. declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
  3. test.sh: line 4: declare: -A: invalid option
  4. declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
  5. test.sh: line 26: >NR_024540_E1 WASH5P refseq1: syntax error: operand expected (error token is ">NR_024540_E1 WASH5P refseq1")
复制代码
——————————————————————————————————————————————————————————————————————
  怎么解决呢?

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
9 [报告]
发表于 2013-09-11 12:49 |只看该作者
回复 8# huang6894


    你的bash版本太旧了,不支持关联数组

  1. $ bash -version
  2. GNU bash, version 4.2.24(1)-release (i686-pc-linux-gnu)
  3. Copyright (C) 2011 Free Software Foundation, Inc.
  4. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

  5. This is free software; you are free to change and redistribute it.
  6. There is NO WARRANTY, to the extent permitted by law.

复制代码

论坛徽章:
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
10 [报告]
发表于 2013-09-11 13:27 |只看该作者
回复 9# liion631818

--------------------------------------------------------------------
$ bash -version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
-----------------------------------------------------------------
declare -a seqArr
declare -a all
是不是也可以定义数组呢?
————————————————————————————————
我不理解的是:
test.sh: line 26: >NR_024540_E1 WASH5P refseq1: syntax error: operand expected (error token is ">NR_024540_E1 WASH5P refseq1")
这条信息
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP