【发布时间】:2017-09-11 07:51:42
【问题描述】:
pdb1.pdb
ATOM 709 CA THR 25 -29.789 33.001 72.164 1.00 0.00
ATOM 711 CB THR 25 -29.013 31.703 72.370 1.00 0.00
ATOM 734 CG THR 25 -29.838 30.458 72.573 1.00 0.00
ATOM 768 CE THR 25 -28.541 28.330 71.361 1.00 0.00
pdb2.pdb
ATOM 765 N ALA 25 -30.838 33.150 73.195 1.00 0.00
ATOM 764 N LEU 26 -29.457 33.193 69.767 1.00 0.00
ATOM 783 N VAL 27 -30.286 31.938 66.438 1.00 0.00
ATOM 798 N GLY 28 -28.076 30.044 64.519 1.00 0.00
需要输出
709 CA 765 N 1.477 -29.789 33.001 72.164 -30.838 33.150 73.195
709 CA 764 N 2.427 -29.789 33.001 72.164 -29.457 33.193 69.767
709 CA 783 N 5.844 -29.789 33.001 72.164 -30.286 31.938 66.438
等等。
pdb1.pdb和pdb2.pdb的内容是读取2、3、6、7、8列的值,然后用6、7、8列做距离计算。
我试过了,但没有打印输出。
Perl
open( f1, "pdb1.pdb" or die $! );
open( f2, "pdb2.pdb" or die $! );
while ( ( $line1 = <$f1> ) and ( $line2 = <$f2> ) ) {
@splitted = split( ' ', $line1 );
my @fields = split / /, $line1;
print $fields[1], "\n";
my $atom1 = @{ [ $line1 =~ m/\S+/g ] }[2];
my $no1 = @{ [ $line1 =~ m/\w+/g ] }[3];
my $x1 = @{ [ $line1 =~ m/\w+/g ] }[6];
my $y1 = @{ [ $line1 =~ m/\w+/g ] }[7];
my $z1 = @{ [ $line1 =~ m/\w+/g ] }[8];
my $atom2 = @{ [ $line2 =~ m/\w+/g ] }[2];
my $no2 = @{ [ $line2 =~ m/\w+/g ] }[3];
my $x2 = @{ [ $line2 =~ m/\w+/g ] }[6];
my $y2 = @{ [ $line2 =~ m/\w+/g ] }[7];
my $z2 = @{ [ $line2 =~ m/\w+/g ] }[8];
print $atom1;
for ( $f1, $f2 ) {
print $atom1 $no1 $x1 $y1 $z1 $atom2 $no2 $x2 $y2 $z2 "\n";
}
}
close( $f1 );
close( $f2 );
【问题讨论】:
标签: perl file file-handling