Я пытался решить свой сценарий, но я был бы очень признателен за помощь.
У меня есть 2 входных файла.
Первый - это файл с несколькими фастами с такими заголовками:
'>AH008024.2 Angelica acutiloba internal transcribed spacers 1 and 2, partial sequence'
'>AJ969149.1 Carthamus tinctorius partial ITS2'
....
(кавычки просто для обозначения знака>, в противном случае он не отображается ...)
Второй - файл проверки учебника для начинающих, который выглядит следующим образом:
AB280738.1,UniplantR,49,68,forward,CCCGHYTGAYYTGRGGTCDC,20,71.4,,,56.5 - 69.8
AB280739.1,UniplantR,49,68,forward,CCCGHYTGAYYTGRGGTCDC,20,71.4,,,56.5 - 69.8
AB280740.1,UniplantR,49,68,forward,CCCGHYTGAYYTGRGGTCDC,20,71.4,,,56.5 - 69.8
...
Я хочу написать «переписанную» версию второго файла, изменив регистрационный номер «AB280738.1» для названий видов из файла fasta, сгенерировав вывод с разделителями табуляции следующим образом:
AB280738.1 Glycyrrhiza uralensis ITS1, 5.8S rRNA and ITS2 UniplantR 49 68 forward CCCGHYTGAYYTGRGGTCDC 20 71.4 56.5 - 69.8
AB280739.1 Glycyrrhiza glabra ITS1, 5.8S rRNA and ITS2 UniplantR 49 68 forward CCCGHYTGAYYTGRGGTCDC 20 71.4 56.5 - 69.8
...
Конечный вывод должен иметь то же количество строк, что и второй входной файл, файл праймеров, который в данном случае составляет 420 строк, но мой текущий вывод записывает 292140 строк, он выполняет сопоставление, но это не так писать правильно.
Я работал над этим кодом, который я вам показываю.
Я вижу, что "соответствующая" часть моего сценария работает, но я думаю, что я не делаю правильный шаг "push". Помимо этого, что-то делает мои вложенные циклы рекурсивными, потому что есть несколько строк из одного совпадения.
Чтобы знать, что он работает, выход должен иметь то же количество строк, что и второй вход, ввод праймеров.
Второй «отпечаток» говорит мне, сколько раз шаблон соответствовал, и он дает мне 540 вместо 420.
Я хотел бы загрузить свои входные файлы и мой текущий вывод, если кто-то хотел бы попробовать с ним, но я не мог найти, куда загружать файлы ..
#!/usr/bin/perl
use diagnostics;
use warnings;
use strict;
print "multifasta:\t";
my $arq1 = <STDIN>;
open (MYFILE, $arq1);
my @file = <MYFILE>;
close (MYFILE);
print "file to rename:\t";
my $arq2 = <STDIN>;
open (MYFILE2, $arq2);
my @file2 = <MYFILE2>;
close (MYFILE2);
my @new_file=();
my $count = ();
open (NEW_FILE, '>>plant_names_primer_bind_renamed.txt');
foreach my $line2 (@file2) {
my @fields = split (/,/, $line2);
my $accession2 = shift(@fields);
foreach my $line (@file) {
if ($line =~ /^>/) {
my $rev = reverse $line;
chop ($rev);
my $header = reverse $rev;
my @header = split (/ /, $header);
my $accession = shift (@header);
if ($accession =~ /$accession2/) {
$count++;
print "$accession2 match $accession\t@header\t@fields\n\n";
print "$count\n";
push (@new_file, ("$accession2\t@header\t@fields"));
print NEW_FILE @new_file;
}
}
}
}