按照文件要求合并同一样本的多个fastq文件至目标目录。更多知识分享请到 https://zouhua.top/。
脚本
#!/usr/bin/perluse warnings;use strict;use Getopt::Long;use Cwd 'abs_path';my ($file, $fq_dir, $out, $help, $version);GetOptions("f|file:s" => \$file,"d|fq_dir:s" => \$fq_dir,"o|out:s" => \$out,"h|help:s" => \$help,"v|version" => \$version);&usage if(!defined $out);my $cwd = abs_path;# outputsystem "mkdir -p $out" unless(-d $out);my %sampleid;open(IN, "$file") or die "can't open $file\n";<IN>;while(<IN>){chomp;my @array = split("\t", $_);$sampleid{$array[0]} = 1;}close(IN);my (%read1, %read2);opendir(DIR, $fq_dir) or die "can't open $fq_dir";foreach (sort grep(/gz$/, readdir(DIR))){my $samplename = $1 if $_ =~ m/(\S+)\_(S\d+)\_L/; # N47_S181_L001_R1_001.fastq.gzif(exists($sampleid{$samplename})){my $read_mode = $1 if $_ =~ m/\_(R\d)\_(\d+)\.fastq.gz/; # N47_S181_L001_R1_001.fastq.gzif($read_mode eq "R1"){my $sample_key = join("_", $samplename, "R1");my $fq1 = join("/", $fq_dir, $_);push(@{$read1{$sample_key}}, $fq1);}elsif($read_mode eq "R2"){my $sample_key = join("_", $samplename, "R2");my $fq2 = join("/", $fq_dir, $_);push(@{$read2{$sample_key}}, $fq2);}}}closedir(DIR);my $out_dir = join("/", $cwd, $out);foreach my $key_r1 (keys %read1){my $fq_r1 = join(" ", @{$read1{$key_r1}});my $length = scalar(@{$read1{$key_r1}});my $target = "$out_dir/$key_r1\.fastq.gz";unless(-e $target){my $shell = "cat $fq_r1 > $target";system("$shell");print("$key_r1 ($length fastq) successfully combined\n");}}foreach my $key_r2 (keys %read2){my $fq_r2 = join(" ", @{$read2{$key_r2}});my $length2 = scalar(@{$read2{$key_r2}});my $target2 = "$out_dir/$key_r2\.fastq.gz";unless(-e $target2){my $shell2 = "cat $fq_r2 > $target2";system("$shell2");print("$key_r2 ($length2 fastq) successfully combined\n");}}sub usage{print <<USAGE;usage:perl $0 -f <file> -d <fq_dir> -o <out>options:-f|file :[essential].-d|dir :[essential].-o|out :[essential].USAGEexit;};sub version {print <<VERSION;version: v1.0update: 20201228 - 20201228author: zouhua1\@outlook.comVERSION
运行
perl combine_fq.pl -f phenotype.tsv -d /data_backup/rawdata/-o RawData_rename > combine.log
