我正在编写一个代码来创建以数组中的一列命名的文件,然后在其中包含另一列的所有常用值.我已成功完成此操作,但现在我想消除文件名之间的空白区域并将其转换为下划线.我怎么做?
#!/usr/local/bin/perl
use strict;
my @traitarray;
my $traitarray;
my $input ;
my %traithash ;
my $t_out ;
my $TRAIT;
my $SNPS;
open ($input, "gwas_catalog_v1.0-downloaded_2015-07-08") || die () ;
while(<$input>) {
@traitarray = split (/\t/);
$TRAIT = $traitarray[7];
$SNPS = $traitarray[21];
if (!exists $traithash {$TRAIT}) {
open ($t_out, ">outputFiles/".$TRAIT.".txt");
print ($t_out "$SNPS\n");
$traithash {$TRAIT} = 1 ;
push (@traitarray, $TRAIT) ;
}
else {
print $t_out "$SNPS\n";
}
}
foreach ($traitarray) {
close "$TRAIT.txt";
}
Run Code Online (Sandbox Code Playgroud)
我曾尝试寻找答案,但许多问题要么包含其他内容,要么在bash终端中如何解决这个问题,我还不熟悉,因为我还是新编码.
该文件是10947980行,有33列.
你可能在谈论你用这个打开的文件
open ($t_out, ">outputFiles/".$TRAIT.".txt")
Run Code Online (Sandbox Code Playgroud)
您可以先使用音译操作符进行操作,tr/ /_/然后您的open调用将更好地编写
my $outfile = "outputFiles/$TRAIT.txt";
$outfile =~ tr/ /_/;
open my $t_out, '>', $outfile or die qq{Unable to open "$outfile" for output: $!};
Run Code Online (Sandbox Code Playgroud)