我寫了一個簡短的腳本來轉換我的數據(從輸入文件到輸出)。我停下來,當我應該只提取這些線能量negatove(每行的最後一個值)。Perl - 從文件中排除一些行
我的輸入數據是:
ATOM 367 OH2 HOH 367 -2.010 7.370 -7.369 -6.52
ATOM 491 OH2 HOH 491 0.990 8.370 -8.369 -2.24
ATOM 652 OH2 HOH 652 5.490 -6.130 2.631 2.98
ATOM 689 OH2 HOH 689 6.490 -15.130 8.631 -4.23
ATOM 738 OH2 HOH 738 7.490 19.870 -8.369 3.38
ATOM 793 OH2 HOH 793 8.990 -2.630 -22.869 -2.29
ATOM 857 OH2 HOH 857 10.490 13.370 -5.869 -1.31
.
.
.
我的輸出數據是這樣的:
moja woda t= 0
1
1SOL OW 1 -0.344 0.437 0.633 -9.290
20.0 20.0 20.0
moja woda t= 1
1
1SOL OW 1 -0.194 0.537 -0.767 -2.990
20.0 20.0 20.0
moja woda t= 2
1
1SOL OW 1 -0.044 0.287 0.333 4.960
20.0 20.0 20.0
moja woda t= 3
1
1SOL OW 1 0.106 0.837 -0.817 -1.300
20.0 20.0 20.0
moja woda t= 4
.
.
.
我的腳本是:
!/usr/bin/perl -w
use strict;
my $list=$ARGV[0];
open(LST,$list) or die;
my $time=0;
my @id_table;
my @nr_table;
open(GRO,">waters.gro") or die;
while(<LST>) {
my $pdb_file=$_;
chomp $pdb_file;
my $pdb_id=substr $pdb_file,0,4;
open(PDB,$pdb_file) or die;
while(<PDB>) {
my $line=$_;
my $x=substr $line,30,8;
my $y=substr $line,38,8;
my $z=substr $line,46,8;
my $en=substr $line,54,8;
my $w_id=substr $line,23,3;
print GRO "moja woda t= $time \n";
printf(GRO "%5d\n",1);
printf(GRO " 1SOL OW 1%8.3f%8.3f%8.3f%8.3f\n",$x/10.0,$y/10.0,$z/10.0,$en);
print GRO " 20.0 20.0 20.0\n";
$id_table[$time]=$pdb_id;
$nr_table[$time]=$w_id;
$time++;
}
close PDB;
}
close GRO;
我想只有這些線轉換能量值小於0(最後一列)。我應該怎麼做?
謝謝你在前進, M.
謝謝你的幫助! –
沒問題!在你的新問題http://stackoverflow.com/questions/34799244/perl-sort-numbers-in-column-in-order它看起來像你用這個答案。如果你接受了你實際使用的答案,它會讓我開心。;-) –
我接受:)起初,我不知道這是什麼厚厚的:)對不起! –