如何使用记录分隔符,然后同时使用子记录分隔符?也许这不是思考我要做什么的最好方法。这是我的目标:

我想一次在指定的项目行中的单个制表符分隔的项目上执行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”。

谢谢你们。

最佳答案

无需阅读我在这里看到的整个文件。您只需要遍历每一行的内容:

    while(my $line = <INFILE>) {
        chomp $line;
        open my $out, '>', "Clustered_Barcode_$..fasta" or die $!;
        foreach my $sequence ( split /\t/, $line ){
            if (exists $hash{$sequence}){
                print $out ">$sequence\n$hash{$sequence}\n";
            }
        }
    }

关于perl - 记录分隔符中的记录分隔符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37648170/

10-16 11:45