Как я могу использовать разделитель записей, а затем одновременно использовать разделитель подзаписей? Возможно, это не лучший способ думать о том, что я пытаюсь сделать. Вот моя цель:
Я хочу выполнить цикл while для одного элемента с разделителями табуляции за раз в указанной строке элементов. Для каждой строки (строки) элементов, разделенных табуляцией, мне нужно распечатать результаты всех циклов while в уникальный файл. Позвольте следующим примерам помочь прояснить ситуацию.
Мой входной файл будет примерно таким. Он будет называться «Clustered_Barcodes.txt».
TTTATGC TTTATGG TTTATCC TTTATCG
TTTATAA TTTATAA TTTATAT TTTATAT TTTATTA
CTTGTAA
Мой perl-код выглядит следующим образом:
#!/usr/bin/perl
use warnings;
use strict;
open(INFILE, "<", "Clustered_Barcodes.txt") or die $!;
my %hash = (
"TTTATGC" => "TATAGCGCTTTATGCTAGCTAGC",
"TTTATGG" => "TAGCTAGCTTTATGGGCTAGCTA",
"TTTATCC" => "GCTAGCTATTTATCCGCTAGCTA",
"TTTATCG" => "TAGCTAGCTTTATCGCGTACGTA",
"TTTATAA" => "TAGCTAGCTTTATAATAGCTAGC",
"TTTATAA" => "ATCGATCGTTTATAACGATCGAT",
"TTTATAT" => "TCGATCGATTTATATTAGCTAGC",
"TTTATAT" => "TAGCTAGCTTTATATGCTAGCTA",
"TTTATTA" => "GCTAGCTATTTATTATAGCTAGC",
"CTTGTAA" => "ATCGATCGCTTGTAACGATTAGC",
);
while(<INFILE>) {
$/ = "\n";
my @lines = <INFILE>;
open my $out, '>', "Clustered_Barcode_$..fasta" or die $!;
foreach my $sequence (@lines){
if (exists $hash{$sequence}){
print $out ">$sequence\n$hash{$sequence}\n";
}
}
}
Мой желаемый результат - три разных файла. Первый файл будет называться «Clustered_Barcode_1.fasta» и выглядеть так:
>TTTATGC
TATAGCGCTTTATGCTAGCTAGC
>TTTATGG
TAGCTAGCTTTATGGGCTAGCTA
>TTTATCC
GCTAGCTATTTATCCGCTAGCTA
>TTTATCG
TAGCTAGCTTTATCGCGTACGTA
Обратите внимание, что это отформатировано так, что ключам предшествует морковь, а затем на следующей строке находится более длинная связанная последовательность (значение). Этот файл включает все последовательности в первой строке Clustered_Barcodes.txt.
Мой третий файл должен называться «Clustered_Barcode_3.fasta» и выглядеть следующим образом:
>CTTGTAA
ATCGATCGCTTGTAACGATTAGC
Когда я запускаю свой код, он принимает только вторую и третью строки последовательностей во входном файле. Как я могу начать с первой строки (избавившись от требования \n для разделителя записей)? Как я могу затем обработать каждый элемент за раз, а затем распечатать результаты строки в один файл? Кроме того, если есть способ включить количество последовательностей в имя файла, это было бы здорово. Позже это помогло бы мне упорядочить файлы по размеру. Например, имя может быть примерно таким: «Clusterd_Barcodes
TTTATGC TTTATGG TTTATCC TTTATCG
TTTATAA TTTATAA TTTATAT TTTATAT TTTATTA
CTTGTAA
File >TTTATGC
TATAGCGCTTTATGCTAGCTAGC
>TTTATGG
TAGCTAGCTTTATGGGCTAGCTA
>TTTATCC
GCTAGCTATTTATCCGCTAGCTA
>TTTATCG
TAGCTAGCTTTATCGCGTACGTA
Sequences.fasta».
Спасибо вам всем.