免费注册 查看新帖 |

Chinaunix

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

请帮忙看看我的脚本错误!!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-07 20:30 |只看该作者 |倒序浏览
这样的 pyrabactin.pdb:
ATOM   3000  C1  FRG   188      24.108  28.400  33.892  1.00  0.00           C
ATOM   3001  C6  FRG   188      23.879  29.616  34.515  1.00  0.00           C
ATOM   3002  C5  FRG   188      23.931  29.754  35.893  1.00  0.00           C
ATOM   3003  C4  FRG   188      24.224  28.704  36.743  1.00  0.00           C
ATOM   3004  S   FRG   188      24.283  29.002  38.303  1.00  0.00           S
ATOM   3005  N1  FRG   188      25.786  28.704  38.792  1.00  0.00           N
ATOM   3006  C11 FRG   188      26.878  29.641  38.602  1.00  0.00           C
ATOM   3007  C12 FRG   188      27.776  29.168  37.461  1.00  0.00           C
ATOM   3008  N2  FRG   188      28.851  29.891  37.076  1.00  0.00           N
ATOM   3009  C13 FRG   188      29.663  29.504  36.081  1.00  0.00           C
ATOM   3010  C14 FRG   188      29.428  28.322  35.392  1.00  0.00           C
ATOM   3011  C15 FRG   188      28.340  27.564  35.770  1.00  0.00           C
ATOM   3012  C16 FRG   188      27.517  27.979  36.807  1.00  0.00           C
ATOM   3013  H13 FRG   188      26.665  27.367  37.106  1.00  0.00           H
ATOM   3014  H12 FRG   188      28.125  26.630  35.250  1.00  0.00           H
ATOM   3015  H11 FRG   188      30.082  28.004  34.580  1.00  0.00           H
ATOM   3016  H10 FRG   188      30.517  30.124  35.811  1.00  0.00           H
ATOM   3017  H8  FRG   188      26.473  30.623  38.358  1.00  0.00           H
ATOM   3018  H9  FRG   188      27.463  29.705  39.519  1.00  0.00           H
ATOM   3019  H1  FRG   188      25.725  28.533  39.848  1.00  0.00           H
ATOM   3020  O1  FRG   188      23.377  28.141  38.995  1.00  0.00           O
ATOM   3021  O2  FRG   188      23.950  30.378  38.546  1.00  0.00           O
ATOM   3022  H2  FRG   188      23.733  30.735  36.327  1.00  0.00           H
ATOM   3023  H3  FRG   188      23.651  30.489  33.904  1.00  0.00           H
ATOM   3024  Br  FRG   188      23.980  28.288  32.005  1.00  0.00           B
ATOM   3025  C2  FRG   188      24.431  27.206  34.715  1.00  0.00           C
ATOM   3026  C3  FRG   188      24.486  27.362  36.179  1.00  0.00           C
ATOM   3027  C7  FRG   188      24.771  26.256  36.957  1.00  0.00           C
ATOM   3028  H4  FRG   188      24.812  26.348  38.042  1.00  0.00           H




我想给这样的 C S N Br ..... 按照出现的次数重新编号,希望能得到这样的结果
ATOM   3000  C1   FRG   188      24.108  28.400  33.892  1.00  0.00           C
ATOM   3001  C2   FRG   188      23.879  29.616  34.515  1.00  0.00           C
ATOM   3002  C3   FRG   188      23.931  29.754  35.893  1.00  0.00           C
ATOM   3003  C4   FRG   188      24.224  28.704  36.743  1.00  0.00           C
ATOM   3004  S1   FRG   188      24.283  29.002  38.303  1.00  0.00           S
ATOM   3005  N1   FRG   188      25.786  28.704  38.792  1.00  0.00           N
ATOM   3006  C5   FRG   188      26.878  29.641  38.602  1.00  0.00           C
ATOM   3007  C6   FRG   188      27.776  29.168  37.461  1.00  0.00           C
ATOM   3008  N2   FRG   188      28.851  29.891  37.076  1.00  0.00           N
ATOM   3009  C13 FRG   188      29.663  29.504  36.081  1.00  0.00           C
ATOM   3010  C7   FRG   188      29.428  28.322  35.392  1.00  0.00           C
ATOM   3011  C8   FRG   188      28.340  27.564  35.770  1.00  0.00           C
ATOM   3012  C9   FRG   188      27.517  27.979  36.807  1.00  0.00           C
ATOM   3013  H1   FRG   188      26.665  27.367  37.106  1.00  0.00           H
ATOM   3014  H2   FRG   188      28.125  26.630  35.250  1.00  0.00           H
ATOM   3015  H3   FRG   188      30.082  28.004  34.580  1.00  0.00           H
ATOM   3016  H4   FRG   188      30.517  30.124  35.811  1.00  0.00           H
ATOM   3017  H5   FRG   188      26.473  30.623  38.358  1.00  0.00           H
ATOM   3018  H6   FRG   188      27.463  29.705  39.519  1.00  0.00           H
ATOM   3019  H7   FRG   188      25.725  28.533  39.848  1.00  0.00           H
ATOM   3020  O1   FRG   188      23.377  28.141  38.995  1.00  0.00           O
ATOM   3021  O2   FRG   188      23.950  30.378  38.546  1.00  0.00           O
ATOM   3022  H8   FRG   188      23.733  30.735  36.327  1.00  0.00           H
ATOM   3023  H9   FRG   188      23.651  30.489  33.904  1.00  0.00           H
ATOM   3024  Br1  FRG   188      23.980  28.288  32.005  1.00  0.00           B
ATOM   3025  C14  FRG   188      24.431  27.206  34.715  1.00  0.00           C
ATOM   3026  C15  FRG   188      24.486  27.362  36.179  1.00  0.00           C
ATOM   3027  C16  FRG   188      24.771  26.256  36.957  1.00  0.00           C
ATOM   3028  H10  FRG   188      24.812  26.348  38.042  1.00  0.00           H


我写了这样的脚本

#!/usr/bin/perl -w
chomp(my $date=`date`);
$^I=".bak";
my @filename="pyrabactin.pdb";
foreach(@filename){
     $ARGV[0]=$_;
     my(%atom,$a,$b);
     while (<>){
        if(/^ATOM\s+\d+\s+([A-Za-z]+)\d+\s+FRG/){
         $a=$1;
         $atom{$a}++;
         $b=$atom{$a}." "x(2-length($atom{$a}));
         s/^(ATOM\s+\d+\s+[^\d])(\d*)/$1$b/;
          }
       print ;
      }
}



怎么会有问题呢.....Br原本后面无数字的双原子的没有编号,而且S原本没有编号的也没编上,还出现了排列发生变化,不齐整.....请教各位大神帮助,如果表述不清晰,请看代码....本屌水平有限





论坛徽章:
0
2 [报告]
发表于 2014-05-08 00:20 |只看该作者
两个正则表达式的问题,第一个:
if(/^ATOM\s+\d+\s+([A-Za-z]+)\d*\s+FRG/){}
因为你的S和Br后面没有数字,必须用\d*来匹配0次出现。
第二个
s/^(ATOM\s+\d+\s+[A-Za-z]+)\d*/$1$b/;
第二个括号没必要分组,并且第一个分组最后你只用一个[^\d]会得到B1 r这种输出。

论坛徽章:
0
3 [报告]
发表于 2014-05-08 20:17 |只看该作者
回复 2# liunerd


    改了,却发现有这样的错误: 后面的FRG 不对齐了,就是很参差不齐,没找到原因,要求FRG 前面有一个空格(前面数字是两位) 和两个空格(前面数字是两位)这样要如何更改我的脚本????
ATOM   3000  C1    FRG   188      24.108  28.400  33.892  1.00  0.00           C
ATOM   3001  C2    FRG   188      23.879  29.616  34.515  1.00  0.00           C
ATOM   3002  C3    FRG   188      23.931  29.754  35.893  1.00  0.00           C
ATOM   3003  C4    FRG   188      24.224  28.704  36.743  1.00  0.00           C
ATOM   3004  S1     FRG   188      24.283  29.002  38.303  1.00  0.00           S
ATOM   3005  N1    FRG   188      25.786  28.704  38.792  1.00  0.00           N
ATOM   3006  C5   FRG   188      26.878  29.641  38.602  1.00  0.00           C
ATOM   3007  C6   FRG   188      27.776  29.168  37.461  1.00  0.00           C
ATOM   3008  N2    FRG   188      28.851  29.891  37.076  1.00  0.00           N
ATOM   3009  C7   FRG   188      29.663  29.504  36.081  1.00  0.00           C
ATOM   3010  C8   FRG   188      29.428  28.322  35.392  1.00  0.00           C
ATOM   3011  C9   FRG   188      28.340  27.564  35.770  1.00  0.00           C
ATOM   3012  C10  FRG   188      27.517  27.979  36.807  1.00  0.00           C
ATOM   3013  H1   FRG   188      26.665  27.367  37.106  1.00  0.00           H
ATOM   3014  H2   FRG   188      28.125  26.630  35.250  1.00  0.00           H
ATOM   3015  H3   FRG   188      30.082  28.004  34.580  1.00  0.00           H
ATOM   3016  H4   FRG   188      30.517  30.124  35.811  1.00  0.00           H
ATOM   3017  H5    FRG   188      26.473  30.623  38.358  1.00  0.00           H
ATOM   3018  H6    FRG   188      27.463  29.705  39.519  1.00  0.00           H
ATOM   3019  H7    FRG   188      25.725  28.533  39.848  1.00  0.00           H
ATOM   3020  O1    FRG   188      23.377  28.141  38.995  1.00  0.00           O
ATOM   3021  O2    FRG   188      23.950  30.378  38.546  1.00  0.00           O
ATOM   3022  H8    FRG   188      23.733  30.735  36.327  1.00  0.00           H
ATOM   3023  H9    FRG   188      23.651  30.489  33.904  1.00  0.00           H
ATOM   3024  Br1    FRG   188      23.980  28.288  32.005  1.00  0.00           B
ATOM   3025  C11   FRG   188      24.431  27.206  34.715  1.00  0.00           C
ATOM   3026  C12   FRG   188      24.486  27.362  36.179  1.00  0.00           C
ATOM   3027  C13   FRG   188      24.771  26.256  36.957  1.00  0.00           C
ATOM   3028  H10   FRG   188      24.812  26.348  38.042  1.00  0.00           H

本来要求FRG 与前面应该有两个空格

论坛徽章:
0
4 [报告]
发表于 2014-05-08 23:29 |只看该作者
回复 3# 林间笑客


    要求FRG 前面有一个空格(前面数字是两位) 和两个空格(前面数字是两位)。。。没看明白。。。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2014-05-09 08:44 |只看该作者
回复 1# 林间笑客
     
     my %hCnt;
     while (<>){
       s/^(ATOM\s+\d+\s+)([a-z]+)\d*\s+(FRG)/sprintf("%s%-5s%s",$1,$2.++$hCnt{$2},$3)/ige;
       print ;
      }
   

论坛徽章:
0
6 [报告]
发表于 2014-05-09 16:15 |只看该作者
回复 5# jason680


    真是高手啊,谢谢,

论坛徽章:
0
7 [报告]
发表于 2014-05-09 16:26 |只看该作者
回复 4# liunerd


    汗颜啊,非专业的而且学的又不精的我确实与你们差距太大了,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP