我正在尝试编写一个接受pdb文件的程序,提取所有信息(原子序号,原子类型,残基名称,残基编号,x,y,z,b因子),重新排列残基编号,以及将新pdb保存在新存档中。我找不到一种方法来使用带字符串数组的循环
这是代码:
print "\nEnter the input file: ";
$inputFile = <STDIN>;
chomp $inputFile;
unless ( open( INPUTFILE, $inputFile ) ) {
print "Cannot read from '$inputFile'.\nProgram closing.\n";
<STDIN>;
exit;
}
chomp( @dataArray = <INPUTFILE> );
close(INPUTFILE);
for ( $line = 0 ; $line <= scalar @dataArray ; $line++ ) {
if ( $dataArray[$line] =~ m/ATOM\s+(\d+)\s+(\w+)\s+(\w{3})\s+(\w)+\s+(\d+)\s+(\S+\.\S+)\s+(\S+\.\S+)\s+(\S+\.\S+)\s+(.+\S)(.\d\d+\.\d\d.+)/ig ) {
$m1 = $1;
$m2 = $2;
$m3 = $3;
$m5 = $5;
$m6 = $6;
$m7 = $7;
$m8 = $8;
$m9 = $9;
$m10 = $10;
push( @m3, $m3 );
push( @m5, $m5 );
foreach $line ( @m3, @m5 ) {
if ( $m3[$line] eq $m3[ $line + 1 ] ) {
$m5[i] = $m5[ i + 1 ];
}
elsif ( $m3[$line] ne $m3[ $line + 1 ] ) {
$m5[ i + 1 ] = $m5[i] + 1;
}
}
$~ = "PDBFORMAT";
format PDBFORMAT =
ATOM @|||| @||| @|| @||| @|||||| @|||||| @|||||| @>>>>> @>>>>>
$m1, $m2, $m3,$m51, $m6, $m7, $m8, $m9, $m10
.
open( PDBFORMAT, ">>my2pdb.txt" ) or die "Can't open anything";
write PDBFORMAT;
}
}
close PDBFORMAT;
我需要制作一个脚本,根据残留名称使第6列连续(第4列)
这是输入
的示例ATOM 316 CB LEU A 608 -38.110 31.803 16.459 1.00 64.64
ATOM 317 CG LEU A 608 -39.261 32.481 15.719 1.00 71.07
ATOM 318 CD1 LEU A 608 -38.782 33.704 14.929 1.00 73.68
ATOM 319 CD2 LEU A 608 -39.981 31.498 14.829 1.00 69.63
ATOM 320 H LEU A 608 -36.638 31.041 18.563 1.00 99.99
ATOM 321 N ARG A 565 -38.634 34.587 18.911 1.00 22.27
答案 0 :(得分:3)
我认为这会按照你的意愿行事。您的样本数据不是很全面,因此这里所做的只是将最终残留数量更改为609
该程序期望输入文件的路径作为命令行上的参数,如
perl process_pdb.pl infile.pdb
use strict;
use warnings;
my ($last_name, $last_num);
while ( <> ) {
next unless /^ATOM/;
my @fields = split;
my $name = $fields[3];
if ( $last_name ) {
$fields[5] = $name eq $last_name ? $last_num : $last_num + 1;
}
print "@fields\n";
($last_name, $last_num) = @fields[3,5];
}
<强>输出强>
ATOM 316 CB LEU A 608 -38.110 31.803 16.459 1.00 64.64
ATOM 317 CG LEU A 608 -39.261 32.481 15.719 1.00 71.07
ATOM 318 CD1 LEU A 608 -38.782 33.704 14.929 1.00 73.68
ATOM 319 CD2 LEU A 608 -39.981 31.498 14.829 1.00 69.63
ATOM 320 H LEU A 608 -36.638 31.041 18.563 1.00 99.99
ATOM 321 N ARG A 609 -38.634 34.587 18.911 1.00 22.27