【发布时间】:2015-12-29 20:20:57
【问题描述】:
我有一个名为 all_energy.out 的文件,我正在尝试以某种方式对其进行排序,以便我可以根据 all_energy.out 文件中的最低能量重新编号目录中的文件。所以我想创建一个数组,文件名和能量从最低能量开始,然后像名字和年龄一样增加能量。
类比示例:
Don 24
Jan 30
Sue 19
排序到
Sue 19
Don 24
Jan 30
all_energy.out 文件示例:最大负值是最低能量。
Energy
0001_IP3_fullBinding_Rigid0001 -219.209742
0001_IP3_fullBinding_Rigid0002 -219.188106
0001_IP3_fullBinding_Rigid0003 -219.064542
0001_IP3_fullBinding_Rigid0004 -219.050730
0001_IP3_fullBinding_Rigid0005 -219.044573
0001_IP3_fullBinding_Rigid0006 -218.927479
0001_IP3_fullBinding_Rigid0007 -218.919717
0001_IP3_fullBinding_Rigid0008 -218.900923
0001_IP3_fullBinding_Rigid0009 -218.898945
0001_IP3_fullBinding_Rigid0010 -218.889269
0001_IP3_fullBinding_Rigid0011 -218.871619
0001_IP3_fullBinding_Rigid0012 -218.859429
0001_IP3_fullBinding_Rigid0013 -218.848516
0001_IP3_fullBinding_Rigid0014 -218.835355
0001_IP3_fullBinding_Rigid0015 -218.822244
0001_IP3_fullBinding_Rigid0016 -218.819328
0001_IP3_fullBinding_Rigid0017 -218.818431
0001_IP3_fullBinding_Rigid0018 -218.815494
0001_IP3_fullBinding_Rigid0019 -218.798388
0001_IP3_fullBinding_Rigid0020 -218.792151
Energy
0002_IP3_fullBinding_Rigid0001 -226.007998
0002_IP3_fullBinding_Rigid0002 -225.635657
文件名在能量值之前给出,例如 0001_IP3_fullBinding_Rigid0001.mol2 是第一个文件的名称。
示例解决方案:
0002_IP3_fullBinding_Rigid0001 -226.007998
0002_IP3_fullBinding_Rigid0002 -225.635657
0001_IP3_fullBinding_Rigid0001 -219.209742
0001_IP3_fullBinding_Rigid0002 -219.188106
0001_IP3_fullBinding_Rigid0003 -219.064542
我当前的脚本是:
#!/usr/bin/perl
use strict;
use warnings;
print "Name of all total energy containing file:\n";
my $energy_file = <STDIN>;
chomp $energy_file;
my $inputfile_energy = $energy_file;
open (INPUTFILE_ENERGY, "<", $inputfile_energy) or die $!;
print map $inputfile_energy->[0],
sort { $a->[1] <=> $b->[1] }
map { [ $_, /(\d+)$/ ] }
<INPUTFILE_ENERGY>;
close $inputfile_energy;
在这一点上,我只是想用他们的名字来获取能量,以正确的顺序打印。然后我将遍历目录中的文件,当名称与排序的能量名称匹配时,它将重新编号。
【问题讨论】:
-
抱歉,仍然难以理解您要完成的工作。
-
示例解决方案有帮助吗?
-
没有连贯的打印是问题...不过我会记住这一点!
标签: arrays perl sorting file-handling