Chinaunix

标题: 求大虾给于指点 [打印本页]

作者: gzgzgz    时间: 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 }' `

然后就不知该怎么办了
作者: gzgzgz    时间: 2005-04-12 22:56
标题: 求大虾给于指点
我自己顶一下
作者: 一梦如是    时间: 2005-04-13 00:11
标题: 求大虾给于指点
您到底想要什么样的结果?
作者: gzgzgz    时间: 2005-04-13 09:18
标题: 求大虾给于指点
给出前后这两个部分分别在这两个文件的第几行
作者: 一梦如是    时间: 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
复制代码

作者: gzgzgz    时间: 2005-04-13 10:44
标题: 求大虾给于指点
但是这样做不到这样的六个的序号是连续的这样一个条件
作者: 一梦如是    时间: 2005-04-13 11:10
标题: 求大虾给于指点
这六个序号不一定是多少?至少也应该有限制吧,譬如大于多少,小于多少?
作者: gzgzgz    时间: 2005-04-13 11:20
标题: 求大虾给于指点
不好意思,没有这样的限制
作者: gzgzgz    时间: 2005-04-13 11:24
标题: 求大虾给于指点
大体上,这样的序号不会到4位数
作者: 一梦如是    时间: 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内容吧我想不到进一步优化的方法了~
作者: dradhzn    时间: 2005-04-13 20:31
标题: 求大虾给于指点
原帖由 "一梦如是" 发表:
但是,如果您的文件稍微有点大,那建议您下班前找个一直开的终端

a.sh >file &
转天早晨再来看file内容吧我想不到进一步优化的方法了~

why not
#nohup cmd &
作者: 一梦如是    时间: 2005-04-13 20:47
标题: 求大虾给于指点
因为似乎ksh使用nohup后退出终端,此进程也会退出,原来姚明兄还做过关于这个的不同shell比较 。
具体说来,俺也不太清楚~
作者: gzgzgz    时间: 2005-04-14 16:06
标题: 求大虾给于指点
谢谢,最少可以解决我的问题了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2