我正在尝试使用创建的哈希并将结果提取到输出文件中。我的脚本在下面。任何帮助将不胜感激。欢呼声。
first_file
数据的样本>nameID ABCD
second_file
数据的样本>nameID 0.5
my ( $first_file, $second_file ) = @ARGV;
my %name;
{
open my $fh, '<', $first_file or die qq{Unable to open "$first_file": $!};
my $key;
while ( <$fh> ) {
if ( /^>(\S+)/ ) {
$key = $1;
}
elsif ( /\S/ ) {
chomp;
$name{$key} .= $_;
}
}
}
open my $fh, '<', $second_file or die qq{Unable to open "$second_file": $!};
while ( <$fh> ) {
if ( /^>(\S+)/ ) {
printf "%s\t%s\n", $1, $name{$1} // 'undef';
}
}
我遇到的麻烦是将printf "%s\t%s\n", $1, $name{$1} // 'undef'
从命令行解压缩到输出文件中。
答案 0 :(得分:0)
尝试以下方法。我已经改变了你的正则表达式。请注意,我假设您的行以&#34;&gt;&#34;开头。角色,&#34; - &#34;你在你的例子中使用过的(否则,你的正则表达式需要以/^-->
开头。
#!/usr/bin/perl
use warnings;
use strict;
my ( $first_file, $second_file ) = @ARGV;
my $write_file = 'output.txt';
my %name;
open my $fh1, '<', $first_file
or die qq{Unable to open "$first_file": $!};
while ( <$fh1> ) {
s/,//;
if ( /^>\s+(\S+)\s+(\S+)/ ) {
$name{$1} = $2;
}
}
close $fh1;
open my $fh2, '<', $second_file
or die qq{Unable to open "$second_file": $!};
open my $wfh, '>', $write_file
or die "Unable to open write file $write_file: $!";
while ( <$fh2> ) {
s/,//;
if ( /^>\s+(\S+)/ ) {
printf $wfh "%s\t%s\n", $1, $name{$1} // 'undef';
}
}
close $fh2;
close $wfh;
输入文件1:
> 1, ABCD
> 2, XFSD
> 3, GDWE
> 4, MMDD
输入文件2:
> 1, 0.5
> 4, 9.99
> 6, 22.22
输出文件:
1 ABCD
4 MMDD
6 undef
答案 1 :(得分:0)
将输出重定向到文件所需要做的就是在命令行中指定它
program.pl file1.txt file2.txt > output.txt
我建议您这样做,以便您可以选择输出的位置,而无需编辑程序