사이트를 수색했는데 놀랍게도 효과가있는 것을 찾을 수없는 것 같습니다. 내 특별한 문제는. 그래서 나는 그것을 게시하고 더 경험이 많은 프로그래머 중 일부가 어떻게 문제를 해결할 수 있는지 보았습니다.파일/배열에서 해시 키를 검색하여 해시 값으로 바꿉니다. 모든 해시 키/값에 대해이 작업을 수행하십시오.
은 내가 특정 라벨 (예를 scaffold1253.1_size81005.6.32799_7496)에 대한 검색을 통해 더 단순화 된 라벨 (예를 scaffold1253로 교체하고 싶다고, 텍스트 파일과 같은 스프레드 시트 (탭으로 구분 된 열이 많은 선)이있다. 1a). 이 레이블은 텍스트 파일의 첫 번째 열에 만 있습니다. 나는 이미 새 레이블에 해당하는 키로 이전 레이블이있는 해시를 갖도록 스크립트를 작성했습니다. 이 해시에는 약 26000 개의 행이 있습니다. 그래서 본질적으로 해시 키를 1 씩 가져 와서 텍스트 파일에서 검색하고 각각의 해시 값으로 바꾸고 싶습니다.
나는 꽤 좋은 서버를 가지고 있기 때문에 너무 복잡하여 첫 번째 열이 특정 프로세스를 가속화 할 수 없다면 ok.
이것은 내가 지금까지 무엇을 가지고 :
use warnings;
$gtf = './Hc_genome/Hc_rztk_1+2+8+9.augustus.gtf';
open(FASTAFILE2, $gtf);
@gtfarray = <FASTAFILE2>;
#print @gtfarray;
my %hash;
while (<>)
{
chomp;
my ($key, $val) = split /\t/;
$hash{$key} .= exists $hash{$key} ? ",$val" : $val;
}
#print %hash;
while (my ($find, $replace) = each %hash) {
foreach (@gtfarray){
$_ =~ s/$find/$replace/g;
push @newgtf, $_;
}
}
print @newgtf;
이 코드가 완료되지 않습니다으로 작동하지 않습니다. 저는 foreach 루프 구조에 문제가 있다고 확신합니다. 미안하지만이 일을하는 다른 방법을 모른다. 누구든지이 파일을 실행하고 교체를 수행하는 더 좋은 방법이 있습니까?
모든 입력 사항을 매우 높이 평가할 것입니다. 감사합니다,
앤드류
다음@DVK
당신의 while 루프, 그것을 수락하지 왜 어떤 아이디어 구문 오류로 실행하여 개조로 전체 스크립트가 무엇입니까? 다시 한 번 감사드립니다! 여기
use warnings;
$gtf = './Hc_genome/Hc_rztk_1+2+8+9.augustus.gtf';
open(FASTAFILE2, $gtf);
my %hash;
while (<>){
chomp;
my ($key, $val) = split /\t/;
$hash{$key} .= exists $hash{$key} ? ",$val" : $val;
}
while $line (<FASTAFILE2>){
my @fields = split(/\t/, $line);
# If you only care about first column, don't need the foreach loop below;
# just do the loop insides on $fields[0]
foreach my $field (@fields) {
$field = $hash{$field} if exists $hash{$field};
print $outfile "$field\t"; # Small bug - will print training \t
}
print $outfile "\n"
}
__END__
구문 오류이다 펄 gtf_mod2.pl 라인 14 < ./Hc_genome/header_file.txt 구문 오류 gtf_mod2.pl 근처 '$ 동안 라인 "gtf_mod2.pl 라인에서 구문 오류 23, near "}" 컴파일 오류로 인해 gtf_mod2.pl 실행이 중단되었습니다.
당신은 당신의 대답에 '동안 (내 $ 라인 =)' –