免费注册 查看新帖 |

Chinaunix

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

求大虾给于指点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-12 22:53 |只看该作者 |倒序浏览
我手上有两个文件要处理,一个的内容是
***     1TMY.pdb
$$$     ALA12   PHE13   MET14   ARG15   MET16   MET17   LEU18   LYS19   ASP20   ILE21   ILE22
HR23    LYS24
$$$     GLY36   ARG37   GLU38   ALA39   VAL40   GLU41   LYS42   TYR43   LYS44   GLU45   LEU46
$$$     PRO58   GLU59   MET60
$$$     GLY62   ILE63   ASP64   ALA65   ILE66   LYS67   GLU68   ILE69   MET70   LYS71   ILE72
$$$     GLN87   ALA88   MET89   VAL90   ILE91   GLU92   ALA93   ILE94   LYS95   ALA96
$$$     PRO108  SER109  ARG110  VAL111  VAL112  GLU113  ALA114  LEU115  ASN116  LYS117
$$$
***     1VJW.pdb
$$$     VAL15   CYS16   GLU17   ASN18   LEU19
$$$     PRO42   CYS43   ALA44   LYS45   ASP46   ALA47   ALA48   ASP49   SER50
$$$
另一个的内容是
***     1TMY.pdb
$$$     GLY2    LYS3
$$$     ASP9    ASP10   ALA11
$$$     ALA25   GLY26   TYR27
$$$     THR34   ASN35
$$$     LYS47   PRO48   ASP49
$$$     ILE55   THR56   MET57
$$$     ASN61
$$$     ASP73   PRO74   ASN75   ALA76   LYS77
$$$     ALA83   MET84   GLY85   GLN86
$$$     GLY97   ALA98   LYS99
$$$     LYS104  PRO105  PHE106  GLN107
$$$     VAL118  SER119
***     1VJW.pdb
$$$     MET1
$$$     ASP6    ALA7    ASP8    ALA9    CYS10   ILE11   GLY12   CYS13   GLY14
$$$     CYS20   PRO21   ASP22   VAL23
$$$     ASP28   ASP29   GLY30   LYS31
$$$     LEU35   GLN36   PRO37   GLU38   THR39   ASP40   LEU41
$$$     CYS51   PRO52   THR53   GLY54   ALA55
$$$
现在要干的事情是:
我给出了这样一个序列要求做匹配,比如说是
MET   GLY   GLN    GLN   ALA   MET
并且知道,这六个连续的序列一定是前三个在第二个文件,后三个在第一个文件,并且他们的序号是连续的,即后面的数字在两个文件中是可接续的。
要求找到这样的序列。注意,在文件中有不同的记录项,“***” 就表示一个新的纪录项的开始,接续的时候不要接错了,只能是两个文件中分别对应的纪录项。

其中,纪录项新行的开始以“$$$“,间隔是用tab不是空格。

我曾经想用c实现,但这样的判断实在太繁琐了,时间不允许。只好求助于shell,可惜shell功底太差。
小弟尽其所能,只能写如下几句,望大侠相助。

a=` grep -v "\*\*\*" first_file | awk '{ print $2 }' `

然后就不知该怎么办了

论坛徽章:
0
2 [报告]
发表于 2005-04-12 22:56 |只看该作者

求大虾给于指点

我自己顶一下

论坛徽章:
0
3 [报告]
发表于 2005-04-13 00:11 |只看该作者

求大虾给于指点

您到底想要什么样的结果?

论坛徽章:
0
4 [报告]
发表于 2005-04-13 09:18 |只看该作者

求大虾给于指点

给出前后这两个部分分别在这两个文件的第几行

论坛徽章:
0
5 [报告]
发表于 2005-04-13 10:13 |只看该作者

求大虾给于指点

第一个所在行
  1. egrep -n 'GLN[0-9]+ *ALA[0-9]+ *MET[0-9]+' 2|cut -d: -f1
复制代码

第二个所在行
  1. egrep -n 'MET[0-9]+ *GLY[0-9]+ *GLN[0-9]+' 2|cut -d: -f1
复制代码

论坛徽章:
0
6 [报告]
发表于 2005-04-13 10:44 |只看该作者

求大虾给于指点

但是这样做不到这样的六个的序号是连续的这样一个条件

论坛徽章:
0
7 [报告]
发表于 2005-04-13 11:10 |只看该作者

求大虾给于指点

这六个序号不一定是多少?至少也应该有限制吧,譬如大于多少,小于多少?

论坛徽章:
0
8 [报告]
发表于 2005-04-13 11:20 |只看该作者

求大虾给于指点

不好意思,没有这样的限制

论坛徽章:
0
9 [报告]
发表于 2005-04-13 11:24 |只看该作者

求大虾给于指点

大体上,这样的序号不会到4位数

论坛徽章:
0
10 [报告]
发表于 2005-04-13 18:07 |只看该作者

求大虾给于指点

  1. $cat a.sh
  2. #!/bin/ksh
  3. i=0
  4. while [ $i -lt 1000 ]
  5. do
  6. unset a b
  7. a=$(egrep -n "MET${i} *GLY$(expr $i + 1) *GLN$(expr $i + 2)" 2|cut -d: -f1)
  8. if [ $a ]
  9. then
  10.   b=$(egrep -n "GLN$(expr $i + 3) *ALA$(expr $i + 4)+ *MET$(expr $i + 5)+" 1|cut -d: -f1)
  11. fi
  12. if [ "$a" -a "$b" ]
  13. then
  14.   echo "开始序号:${i}-结束序号:$(expr $i + 5)"
  15.   echo "序列出现在第二个文件的第${a}行,第一个文件的第${b}行"
  16. fi
  17.   i=$(expr $i + 1)
  18. done
复制代码

但是,如果您的文件稍微有点大,那建议您下班前找个一直开的终端
  1. a.sh >file &
复制代码
转天早晨再来看file内容吧我想不到进一步优化的方法了~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP