【发布时间】:2018-08-30 21:43:13
【问题描述】:
我编写了以下脚本:
#!/usr/bin/perl -w
use strict;
die "usage:$0 <Input_folder_1>\t<Input_folder_2>\t<Out_folder>\t<Project_name>\t\n" unless $#ARGV == 3;
my $folder1 = shift;
#print "$folder1\n";
my $folder2 = shift;
#print "$folder2\n";
my $out = shift;
my $project_name = shift;
my $file1;
my $file2;
my $file3;
my $file4;
#print "$project_name\n";
foreach(glob("$folder1/$project_name\_S[0-9]_R1_001.fastq.gz")){
chomp;
#print "Hello World\n";
$_ =~ m{$folder1/$project_name\_S[0-9]_R1_001\.fastq.gz};
#print "$_\n";
$file1 = $_;
print "$file1\n";
}
foreach(glob("$folder2/$project_name\_S[0-9]_R1_001.fastq.gz")){
chomp;
#print "Hello World\n";
$_ =~ m{$folder2/$project_name\_S[0-9]_R1_001\.fastq.gz};
#print "$_\n";
$file2 = $_;
print "$file2\n";
}
cat $file1 $file2 > $out/$project_name.R1.fastq.gz; #第 42 行
foreach(glob("$folder1/$project_name\_S[0-9]_R2_001.fastq.gz")){
chomp;
#print "Hello World\n";
$_ =~ m{$folder1/$project_name\_S[0-9]_R2_001\.fastq.gz};
#print "$_\n";
$file3 = $_;
print "$file3\n";
}
foreach(glob("$folder2/$project_name\_S[0-9]_R2_001.fastq.gz")){
chomp;
#print "Hello World\n";
$_ =~ m{$folder2/$project_name\_S[0-9]_R2_001\.fastq.gz};
#print "$_\n";
$file4 = $_;
print "$file4\n";
}
`cat $file3 $file4 > $out/$project_name.R2.fastq.gz`;
这个脚本运行如下:
./script.pl folder1 folder2 output_folder project_name
当我使用以下文件运行此脚本时,它运行顺利
folder1/123-abcQ_S3_R1_001.fastq.gz
folder2/123-abcQ_S1_R1_001.fastq.gz
folder1/123-abcQ_S3_R2_001.fastq.gz
folder2/123-abcQ_S1_R2_001.fastq.gz
./script.pl folder1 folder2 out/ 123-abcQ
它将文件夹1/123-abcQ_S3_R1_001.fastq.gz和文件夹2/123-abcQ_S1_R1_001.fastq.gz合并,在输出目录中创建一个合并的123-abcQ.R1.fastq.gz文件。
但是当我使用以下文件运行相同的脚本时,它给了我一个错误:
folder1/demo-1_S10_R1_001.fastq.gz
folder1/demo-1_S10_R2_001.fastq.gz
folder2/demo-1_S12_R1_001.fastq.gz
folder2/demo-1_S12_R2_001.fastq.gz
./script.pl folder1 folder2 out/ demo-1
在连接 (.) 或字符串中使用未初始化的值 $file1 ./script.pl 第 42 行。使用未初始化的值 $file2 in ./script.pl 第 42 行的连接 (.) 或字符串。
我不知道如何解决这个问题。您的建议将不胜感激。
【问题讨论】:
-
请为我们标记第 42 行。
-
S[0-9]_无法匹配S10_,有两位数,不是一位。 -
嗨,当我用 [0-9]+ 修改正则表达式时,它仍然给出了同样的错误。与 + 运算符匹配一个或多个数字。