如果我能在这里得到一些帮助,我很好奇。我是一个perl新手,并且无法弄清楚如何将以下代码转换为对我的分析更有用的东西。
此代码目前从用户提供的数据文件列表中获取第1和第4列,并将它们放在一起。
我希望我的代码要做的是,对于此代码生成的“当前输出”的每一行(见下文),将这些第4列值(filea,fileb,filec)的总和。不太确定如何实现这个......
当前输出:
filea fileb filec
entrya | 0 |10.2 | 0
entryb | 0 | 0.0 | 1
entryc | 8 | 57.0| 46
期望的输出
sum
entrya | 10.2
entryb | 1
entryc | 111
当前代码如下所示:
main: {
my %data;
foreach my $file (@rsem_files) {
open (my $fh, $file) or die "Error, cannot open file $file";
my $header = <$fh>; # ignore it
while (<$fh>) {
chomp;
my @x = split(/\t/);
my $acc = $x[0];
my $count = $x[4];
$data{$acc}->{$file} = $count;
}
close $fh;
}
my @filenames = @rsem_files;
foreach my $file (@filenames) {
$file = basename($file);
}
print join("\t", "", @filenames) . "\n";
foreach my $acc (keys %data) {
print "$acc";
foreach my $file (@rsem_files) {
my $count = $data{$acc}->{$file};
unless (defined $count) {
$count = "NA";
}
print "\t$count";
}
print "\n";
}
exit(0);
}
答案 0 :(得分:1)
更改@rsemfiles
循环:
# create $total variable outside loop
my $total = 0;
foreach my $file (@rsem_files) {
my $count = $data{$acc}->{$file};
# change unless to if, no need for NA
if (defined $count) {
$total += $count;
}
}
# move print outside loop so it happens once instead of per-file
print '\t$total\n';
答案 1 :(得分:0)
foreach $line(@rsemfiles) {
if ($line=~ /^entry/) {
#match the line starting with the word entry
my $entry=$1; my $filea=$2; my $fileb=$3; my $filec=$4;
# make variables out of the column values
现在您已拥有这些变量,您可以对它们进行数学运算。