使用perl从两个文件中将一些列添加到文件中

时间:2015-01-17 21:08:46

标签: perl

我有两个输入文件(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

1 个答案:

答案 0 :(得分:1)

您正在编写file1的输出,然后是file2,这是输出反映的内容。

读入第一个文件的输入,并将数据存储在散列中。然后从第二个文件中读取输入,并在最后打印两个文件中的记录。