我有两个输入文件(rmsd1.xvg和rmsd2.xvg)。我想在从每个输入文件中选择一个不同的列后将它们写入输出文件。我的输入文件和代码如下:
rmsd1.xvg:
# GROup of MAchos and Cynical Suckers
#
@ title "RMSD"
@ xaxis label "Time (ps)"
@ yaxis label "RMSD (nm)"
1.0000000 0.0000009
20.0000000 0.1478001
40.0000000 0.1648600
60.0000000 0.1645018
80.0000000 0.1786710
100.0000000 0.2115960
rmsd2.xvg:
# GROup of MAchos and Cynical Suckers
#
@ title "RMSD"
@ xaxis label "Time (ps)"
@ yaxis label "RMSD (nm)"
1.0000000 0.1000009
20.0000000 0.2478001
40.0000000 0.3648600
60.0000000 0.4645018
80.0000000 0.5786710
100.0000000 0.6115960
我的代码:
#!/usr/bin/perl
use strict;
use warnings;
# Open file1 to read
open my $input_file1, '<', "rmsd1.xvg" or die qq{Failed to open "rmsd1.xvg" for writing: $!};
# Open file2 to read
open my $input_file2, '<', "rmsd2.xvg" or die qq{Failed to open "rmsd2.xvg" for writing: $!};
# Open new file to write
open my $out_file, '>', "out_file.xvg" or die qq{Failed to open "out_file.xvg" for writing: $!};
while(<$input_file1>)
{
next if /(^\s*$)|(^#)|(^@)/;
my @columns1 = split;
print $out_file join("\t", $columns1[0],$columns1[1], "\n");
}
while(<$input_file2>)
{
next if /(^\s*$)|(^#)|(^@)/;
my @columns2 = split;
print $out_file join("\t", $columns2[1]), "\n";
}
close($input_file1);
close($input_file2);
close($out_file);
我的代码为我提供了如下输出。
输出文件:
1.0000000 0.0000009
20.0000000 0.1478001
40.0000000 0.1648600
60.0000000 0.1645018
80.0000000 0.1786710
100.0000000 0.2115960
0.1000009
0.2478001
0.3648600
0.4645018
0.5786710
0.6115960
而我希望获得如下输出。这就是所有列应该并排。我怎样才能得到这个输出?
请求:
1.0000000 0.0000009 0.1000009
20.0000000 0.1478001 0.2478001
40.0000000 0.1648600 0.3648600
60.0000000 0.1645018 0.4645018
80.0000000 0.1786710 0.5786710
100.0000000 0.2115960 0.6115960
答案 0 :(得分:1)
您正在编写file1的输出,然后是file2,这是输出反映的内容。
读入第一个文件的输入,并将数据存储在散列中。然后从第二个文件中读取输入,并在最后打印两个文件中的记录。