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
标题:
求大虾给于指点
第一个所在行
egrep -n 'GLN[0-9]+ *ALA[0-9]+ *MET[0-9]+' 2|cut -d: -f1
复制代码
第二个所在行
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
标题:
求大虾给于指点
$cat a.sh
#!/bin/ksh
i=0
while [ $i -lt 1000 ]
do
unset a b
a=$(egrep -n "MET${i} *GLY$(expr $i + 1) *GLN$(expr $i + 2)" 2|cut -d: -f1)
if [ $a ]
then
b=$(egrep -n "GLN$(expr $i + 3) *ALA$(expr $i + 4)+ *MET$(expr $i + 5)+" 1|cut -d: -f1)
fi
if [ "$a" -a "$b" ]
then
echo "开始序号:${i}-结束序号:$(expr $i + 5)"
echo "序列出现在第二个文件的第${a}行,第一个文件的第${b}行"
fi
i=$(expr $i + 1)
done
复制代码
但是,如果您的文件稍微有点大,那建议您下班前找个一直开的终端
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