!/usr/bin/perl
use Cwd;
use warnings;
open($fh,'<', "clinical.txt");
$line = <$fh>;
while($line = <$fh>)
{
my @fields2 =split(" ",$line);
push(@id,$fields2[1]);
push(@status,$fields2[3]);
}
@flow = grep { -d } glob "*";
$arrSize = @flow;
for ($p = 0; $p < $arrSize; $p++)
{
@files=<$flow[$p]/*.maf>;
print $flow[$p],"\n";
foreach $file(@files)
{
print $file,"\n";
open(x,$file);
%hash={};
%tested={};
%Mut_Count={};
$hyper=0;
$line = <x>;
$line = <x>;
$line = <x>;
$line = <x>;
$line = <x>;
$line = <x>;
while($line = <x>)
{
@temp=split("\t",$line);
$key=$temp[4]."_".$temp[5]."_".$temp[6]."_".$temp[10]."_".$temp[11]."_".$temp[12]."_".$temp[15];
push @{$hash{$key}}, "0";
push @{$Mut_Count{$temp[15]}}, "0";
}
@nm=split(/\./,$file);
open(x,$file);
open(Out1,">Results/".$nm[1]."_Hyper.txt");
$line = <x>;
$line = <x>;
$line = <x>;
$line = <x>;
$line = <x>;
@temp=split(" ",$line);
@temp2=split(",",$temp[1]);
print Out1 "Gene\tMutation\tType\tdbSNP\tStatus\tPolyphen\tSift";
for($j=0;$j<scalar(@id);$j++){
my @M=split('-', $id[$j]);
for($i=0;$i<scalar(@temp2);$i++)
{
my @N=split('-', $temp2[$i]);
if(scalar(@{$Mut_Count{$temp2[$i]}})>499 && $M[0] eq $N[0] && $M[1] eq $N[1] && $M[2] eq $N[2] && $status[$j] eq 'MSS')
{
print Out1 "\t",$temp2[$i];
$hyper++;
}
}
}
$line = <x>;
while($line = <x>)
{
$hy=0;
@temp=split("\t",$line);
$key=$temp[4]."_".$temp[5]."_".$temp[6]."_".$temp[10]."_".$temp[11]."_".$temp[12];
if(!exists $tested{$key})
{
push @{$tested{$key}}, "0";
print Out1 "\n",$temp[0],"\t",$key,"\t",$temp[8],"\t",$temp[13],"\t",$temp[25],"\t",$temp[72],"\t",$temp[73];
for($i=0;$i<scalar(@temp2);$i++)
{
$key=$temp[4]."_".$temp[5]."_".$temp[6]."_".$temp[10]."_".$temp[11]."_".$temp[12]."_".$temp2[$i];
my @L=split('-', $temp2[$i]);
for($j=0;$j<scalar(@id);$j++){
my @O=split('-', $id[$j]);
if(scalar(@{$Mut_Count{$temp2[$i]}})>499 && $L[0] eq $O[0] && $L[1] eq $O[1] && $L[2] eq $O[2] && $status[$j] eq 'MSS')
{
if(exists $hash{$key})
{
print Out1 "\t1";
$hy++;
}
else
{
print Out1 "\t0";
}
}
}
}
}
}
open(Out3,">Results/".$nm[1]."_Summary.txt");
print Out3 "Hypermutated\t$hyper\n";
}
}
$line = <$fh>; while($line = <$fh>)
这些行在已关闭的文件句柄$fh上显示readline()%hash={}; %tested={}; %Mut_Count={};
在这三行中表示Reference在需要偶数大小列表的位置找到
.maf基本上是GDC下载的文件,根据我们的需要对标头进行了位修改,并具有唯一的TCGA ID。而临床信息是包含TCGA ID、其来源和MSI_Status的文件,MSI_Status告诉我们其是否为MSI-L,MSI-H或MSS。我正在阅读多个.maf文件并将其与clinical_info文件进行比较,如果满足if条件,我希望它生成主表(写一个文件)我在windows下做的。请帮我解决这个问题,谢谢期待。
1条答案
按热度按时间nfs0ujit1#
答复
您可以通过删除这三行来消 debugging 误,但是如果您接受(请!)
use strict;
建议,则需要将它们替换为my %hash;
,依此类推。在Perl下,散列(和数组)不需要初始化。如果你想初始化一个,你可以给它分配另一个数组,或者列表,或者另一个散列。初始化器的长度必须是偶数,因为它被解释为键/值对。你的代码提供了一个散列引用,它不会被Perl扩展为一个空散列。因此出现了这个错误。
如果不初始化散列会让您感到紧张,可以使用
my %hash = ();
。另一方面,如果你打算使用标量作为哈希引用,你需要初始化它。这就是你使用花括号的地方,花括号是一个哈希构造函数,它返回一个对所构造哈希的引用。所以: