【发布时间】:2016-10-05 12:21:15
【问题描述】:
如何使用记录分隔符,然后同时使用子记录分隔符?也许这不是思考我正在尝试做的事情的最佳方式。这是我的目标:
我想在指定的项目行中一次对单个制表符分隔的项目执行 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_1_File_3_Sequences.fasta”。
谢谢大家。
【问题讨论】:
标签: perl hash record bioinformatics