약 8,000 개의 시퀀스가있는 fasta 파일이 있습니다. 식별자 줄 이름을 임의의 고유 한 축약 이름 (최대 길이 10)으로 변경해야합니다. fasta 파일에는 이와 같은 시퀀스가 포함되어 있습니다.
>AX039539.1.1212 Bacteria;Chloroflexi;Dehalococcoidia;Dehalococcoidales;
GAUGAACGCUAGCGGCGUGCCUUAUGCAUGCAAGUCGAACGGUCUUAAGCAAUUAAGAUAGUGGCAAACGGGUGAGUAACGCGUAAGUAACCUACCUCUAAGUGGGGGAUAGCUUCGGGAAACUGAAGGUAAUACCGCAUGUGGUGGGCCGACAUAAGUUGGUUCACUAAAGCCGUAAGGUGCUUGGUGAGGGGCUUGCGUCCGAUUAGCUAGUUGGUGGGGUAACGGCCUACCAAGGCUUCGAUCGGUAGCUGGUCUGAGAGGAUGAUCAGCCACACUGGGACUGAGACACGGCCCAGACUCCUACGGGAG
지금까지 내 스크립트는 다음과 같습니다.
use strict;
use warnings;
#change ID line name to random unique shorten (max 10 characters) string
open (my $fh,"$ARGV[0]") or die "Failed to open file: $!\n";
open (my $out_fh, ">$ARGV[0]_shorten_ID.fasta");
my $string;
while(<$fh>) {
for (0..9) { $string .= chr( int(srand(rand(25) + 65) )); }
if ($_ =~ s/^>*.+\n/>$string/){ # change header FASTA header
print $out_fh "$_";
}
}
close $fh;
close $out_fh;
나는 이것을 시도했지만 10 문자로 시작한 다음 내려 가면서 10을 더 추가하고 시퀀스를 잃습니다. 비슷한 질문이 이미 있다는 것을 알고 있지만 약간 다릅니다. 고유 한 단축 이름을 무작위로 생성해야합니다.
루프 $string
내부의 빈 문자열 로 재설정 하여 문제를 간단히 해결할 수 있습니다 while
. 그러나 이것은 불필요하게 복잡하고 비효율적입니다 >
.로 시작하는 줄을 보지 않을 때 임의의 식별자를 생성하고 버립니다 . 나는 그냥 갈 것이다
perl -pe 'BEGIN { srand(time()); }
s/>.*/ ">" . join ("", map { chr(rand(25)+65) } 0..9) /e' file.fasta
적절한 의사 난수 식별자가 절대적으로 필요하지 않은 경우
perl -pe 'BEGIN { $id = "a" x 7 } s/>.*/">" . $id++/e' file.fasta
"aaaaaaa", "aaaaaab"등과 같은 식별자를 생성합니다. (나는 7 자 식별자를 사용했지만 4 개의 문자는 8,000 개의 고유 ID : s에 충분합니다. "alvr"로 끝납니다.)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다