我对 Perl 代码很陌生,我正在将一些数据集与以下代码合并。数据设置如下:第一行指定样本名称,然后是第二、第三列的计数......第一列指定基因名称。我有 2 个要合并在一起的大数据集,我一直在使用以下 Perl 脚本,方法是指定 perl 脚本的路径,并在终端中运行以下代码:
$ cd /path/to/file
$ perl /path/to/file dataset1.txt dataset2.txt merged.txt
Perl 脚本如下:
use strict;
my $file1=$ARGV[0];
my $file2=$ARGV[1];
my $out=$ARGV[2];
my %hash=();
open(RF,"$file1") or die $!;
while(my $line=<RF>){
chomp($line);
my @arr=split(/\t/,$line);
my $gene=shift(@arr);
$hash{$gene}=join("\t",@arr);
}
close(RF);
open(RF,"$file2") or die $!;
open(WF,">$out") or die $!;
while(my $line=<RF>){
chomp($line);
my @arr=split(/\t/,$line);
my $gene=shift(@arr);
if(exists $hash{$gene}){
print WF $gene . "\t" . $hash{$gene} . "\t" . join("\t",@arr) . "\n";
}
}
close(WF);
close(RF);
使用上面的代码,我应该得到一个合并表,删除重复的行,第二个文本文件的(样本 A 到样本 Z)列合并到第一个文本文件的列(样本 1 到样本 100),所以它应该看起来像这样,由制表符分隔。
Gene Name Sample 1 Sample 2 ..... Sample A Sample B...
TP53 2.345 2.234 4.32 4.53
当我的合并文件返回合并两个数据集时出现问题,但是下一行而不是同一行中的第二个数据集。它将识别、排序和合并计数,但会进入下一行。我的代码或输入有问题吗?
感谢您的所有帮助!