Perl程序2多样品覆盖求解

Perl程序2:多样品覆盖度合并

合并*txt文件最后一列,并生成基因和样品的覆盖度矩阵,结果参考: gene.cov.xls

引用 皆我百晓生 小程序回复内容作答:
以下是一个Perl程序的示例,用于合并多个样品的覆盖度数据,并生成基因和样品的覆盖度矩阵。

#!/usr/bin/perl
use strict;
use warnings;

# 输入文件列表
my @files = qw(sample1.txt sample2.txt sample3.txt);

# 存储基因和样品的覆盖度数据
my %gene_coverage;

# 读取每个文件的最后一列数据
foreach my $file (@files) {
   (my $fh, "<", $file) or die "Cannot file $file: $!";
    while (my $line = <$fh>) {
        chomp $line;
        my @fields = split /\t/, $line;
        my $gene = $fields[0];
        my $coverage = $fields[-1];
        push @{$gene_coverage{$gene}}, $coverage;
    }
    close($fh);
}

# 输出覆盖度矩阵
(my $output_fh, ">", "gene.cov.xls") or die "Cannot file gene.cov.xls: $!";
print $output_fh "Gene\t", join("\t", @files), "\n";
foreach my $gene (sort keys %gene_coverage) {
    print $output_fh "$gene\t", join("\t", @{$gene_coverage{$gene}}), "\n";
}
close($output_fh);

print "Coverage matrix generated successfully!\n";

请将上述代码保存为一个名为merge_coverage.pl的文件,并将需要合并的样品的覆盖度数据文件命名为sample1.txtsample2.txtsample3.txt等。然后在Linux终端中运行以下命令来执行Perl程序:

perl merge_coverage.pl

执行完成后,将生成一个名为gene.cov.xls的文件,其中包含了基因和样品的覆盖度矩阵。